Chapter 13 & 14 C Preprocessor and Other C Topics Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education.

Slides:



Advertisements
Similar presentations
 2000 Prentice Hall, Inc. All rights reserved. Chapter 14 - Advanced C Topics Outline 14.1Introduction 14.2Redirecting Input/Output on UNIX and DOS Systems.
Advertisements

Files in C Rohit Khokher.
What is a pointer? First of all, it is a variable, just like other variables you studied So it has type, storage etc. Difference: it can only store the.
 2000 Prentice Hall, Inc. All rights reserved. Chapter 14 - Advanced C Topics Outline 14.1Introduction 14.2Redirecting Input/Output on UNIX and DOS Systems.
Chapter 14 - Advanced C Topics Associate Prof. Yuh-Shyan Chen Dept. of Computer Science and Information Engineering National Chung-Cheng University.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 20 - C Legacy Code Topics Outline 20.1 Introduction 20.2 Redirecting Input/Output on UNIX and.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 14 - Advanced C Topics Outline 14.1Introduction.
 2000 Deitel & Associates, Inc. All rights reserved. Chapter 18 - C Legacy Code Topics Outline 18.1Introduction 18.2Redirecting Input/Output on UNIX and.
Lecture 2 Introduction to C Programming
Introduction to C Programming
 2000 Prentice Hall, Inc. All rights reserved. Chapter 2 - Introduction to C Programming Outline 2.1Introduction 2.2A Simple C Program: Printing a Line.
Introduction to C Programming
Chapter 10.
 2007 Pearson Education, Inc. All rights reserved Introduction to C Programming.
 2000 Deitel & Associates, Inc. All rights reserved. Chapter 17 - The Preprocessor Outline 17.1Introduction 17.2The #include Preprocessor Directive 17.3The.
Chapter 9 Formatted Input/Output Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc.
Chapter 6 C Arrays Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc. Arrays are data structures.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 13 - The Preprocessor Outline 13.1Introduction.
 2000 Prentice Hall, Inc. All rights reserved. Chapter 13 - The Preprocessor Outline 13.1Introduction 13.2The #include Preprocessor Directive 13.3The.
Introduction to C Programming
Chapter 3: Introduction to C Programming Language C development environment A simple program example Characters and tokens Structure of a C program –comment.
C How to Program, 6/e © by Pearson Education, Inc. All Rights Reserved.
 2007 Pearson Education, Inc. All rights reserved C Preprocessor.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 19 - The Preprocessor Outline 19.1 Introduction 19.2 The #include Preprocessor Directive 19.3.
Windows Programming Lecture 05. Preprocessor Preprocessor Directives Preprocessor directives are instructions for compiler.
 2000 Prentice Hall, Inc. All rights reserved. Chapter 12 - The Preprocessor Directives (Macros)
 2000 Prentice Hall, Inc. All rights reserved. Chapter 14 - Advanced C Topics Outline 14.1Introduction 14.2Redirecting Input/Output on UNIX and DOS Systems.
C How to Program, 7/e © by Pearson Education, Inc. All Rights Reserved.
Copyright © 2012 Pearson Education, Inc. Publishing as Pearson Addison-Wesley C H A P T E R 2 Input, Processing, and Output.
C How to Program, 6/e © by Pearson Education, Inc. All Rights Reserved.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 2 Chapter 2 - Introduction to C Programming.
Introduction to C Programming Angela Chih-Wei Tang ( 唐 之 瑋 ) Department of Communication Engineering National Central University JhongLi, Taiwan 2010 Fall.
Chapter 13 C Preprocessor C How to Program, 8/e ©2016 by Pearson Education, Inc., Hoboken, NJ. All Rights Reserved.
C Hints and Tips The preprocessor and other fun toys.
Fundamentals of C and C++ Programming. EEL 3801 – Lotzi Bölöni Sub-Topics  Basic Program Structure  Variables - Types and Declarations  Basic Program.
C How to Program, 7/e © by Pearson Education, Inc. All Rights Reserved.
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Preprocessing Lecture 12 April 7, 2005.
1 Chapter 2 C++ Syntax and Semantics, and the Program Development Process.
 2007 Pearson Education, Inc. All rights reserved C Arrays.
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Preprocessor Midterm Review Lecture 7 Feb 17, 2004.
Programming Fundamentals. Summary of previous lectures Programming Language Phases of C++ Environment Variables and Data Types.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Chapter 2 - Introduction to C Programming Outline.
THE PREPROCESSOR
The Preprocessor Directives Introduction Preprocessing – Occurs before program compiled Inclusion of external files Definition of symbolic constants.
 2000 Prentice Hall, Inc. All rights reserved. Chapter 13 - The Preprocessor Outline 13.1Introduction 13.2The #include Preprocessor Directive 13.3The.
© Oxford University Press All rights reserved. CHAPTER 10 THE PREPROCESSOR DIRECTIVE.
1 Object-Oriented Programming -- Using C++ Andres, Wen-Yuan Liao Department of Computer Science and Engineering De Lin Institute of Technology
 2007 Pearson Education, Inc. All rights reserved. A Simple C Program 1 /* ************************************************* *** Program: hello_world.
CS 1704 Introduction to Data Structures and Software Engineering.
C language + The Preprocessor. + Introduction The preprocessor is a program that processes that source code before it passes through the compiler. It.
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Template, Preprocessing Lecture 9 November 2, 2004.
1 Lecture 2 - Introduction to C Programming Outline 2.1Introduction 2.2A Simple C Program: Printing a Line of Text 2.3Another Simple C Program: Adding.
13 C Preprocessor.
Chapter 2 - Introduction to C Programming
INC 161 , CPE 100 Computer Programming
Chapter 13 - The Preprocessor
Chapter 2 - Introduction to C Programming
Programmazione I a.a. 2017/2018.
Chapter 2 - Introduction to C Programming
Introduction to C++ Programming
Chapter 14 - Advanced C Topics
Chapter 2 - Introduction to C Programming
C Preprocessor(CPP).
Programming in C Miscellaneous Topics.
Chapter 2 - Introduction to C Programming
Programming in C Miscellaneous Topics.
C Preprocessor Seema Chandak.
Chapter 2 - Introduction to C Programming
Chapter 1 c++ structure C++ Input / Output
Presentation transcript:

Chapter 13 & 14 C Preprocessor and Other C Topics Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc.

OBJECTIVES In this chapter, you will learn: How to use #include for developing a large program. How to use #define to create macros and macros with arguments. To use conditional compilation to specify portions of a program that should not always be compiled (such as code that assists you in debugging). To display error messages during conditional compilation. To use assertions to test if the values of expressions are correct.

Introduction Preprocessing  Occurs before a program is compiled  Inclusion of other files  Definition of symbolic constants and macros  Conditional compilation of program code  Conditional execution of preprocessor directives Format of preprocessor directives  Lines begin with #  Only whitespace characters and comments may appear before a preprocessor directive on a line

The #include Preprocessor Directive #include  Copy of a specified file included in place of the directive  #include Search standard library for file Use for standard library files  #include "filename" Search current directory, then standard library Use for user-defined files  Used for: Programs with multiple source files to be compiled together Header file – has common declarations and definitions (classes, structures, function prototypes)

The #define Preprocessor Directive: Symbolic Constants #define  Preprocessor directive used to create symbolic constants and macros  Symbolic constants When program compiled, all occurrences of symbolic constant replaced with replacement text  Format #define identifier replacement-text  Example: #define PI  Everything to right of identifier replaces text #define PI = Replaces “ PI ” with " = "  Cannot redefine symbolic constants once they have been created

The #define Preprocessor Directive: Macros Macro  Operation defined in #define  A macro without arguments is treated like a symbolic constant  A macro with arguments has its arguments substituted for replacement text, when the macro is expanded  Performs a text substitution – no data type checking  The macro #define CIRCLE_AREA( x ) ( PI * ( x ) * ( x ) ) would cause area = CIRCLE_AREA( 4 ); to become area = ( * ( 4 ) * ( 4 ) );

The #define Preprocessor Directive: Macros Use Parentheses  Without them the macro, i.e., #define CIRCLE_AREA( x ) PI * x * x area = CIRCLE_AREA(c+2) would lead to area = * c + 2 * c + 2; Multiple arguments #define RECTANGLE_AREA( x, y ) ( ( x ) * ( y ) ) would cause rectArea = RECTANGLE_AREA( a + 4, b + 7 ); to become rectArea = ( ( a + 4 ) * ( b + 7 ) );

The #define Preprocessor Directive: Macros #undef  Undefine a symbolic constant or macro  If a symbolic constant or macro has been undefined it can later be redefined

Conditional Compilation Conditional compilation  Control the execution of preprocessor directives and the compilation of program code  Cast expressions, sizeof, enumeration constants cannot be evaluated in preprocessor directives  Structure similar to if #if !defined( NULL ) #define NULL 0 #endif Determines if symbolic constant NULL has been defined  If NULL is defined, defined( NULL ) evaluates to 1  If NULL is not defined, this function defines NULL to be 0  Every #if must end with #endif  #ifdef short for #if defined (name)  #ifndef short for #if !defined (name)

Conditional Compilation Other statements  #elif – equivalent of else if in an if statement  #else – equivalent of else in an if statement "Comment out" portions of code  If the code contains comments, cannot use /*... */ for this purpose  Instead, we should use #if 0 code commented out #endif  To enable code, change 0 to 1

Conditional Compilation Debugging #define DEBUG 1 #ifdef DEBUG printf("Variable x = %d\n“, x); #endif  Defining DEBUG to 1 enables code  After code corrected, remove #define statement  Debugging statements are now ignored

#error Preprocessor Directives Format: #error tokens  Tokens are sequences of characters separated by spaces "I like C++" has 3 tokens When a #error directive is processed on some systems, it  displays a message including the specified tokens as an error message, e.g. #error 1 – Out of range error  stops preprocessing and prevents program compilation

The # and ## Operators #  Causes a replacement text token to be converted to a string surrounded by quotes  The statement #define HELLO( x ) printf( “Hello, ” #x “\n” ); would cause HELLO( John ) to become printf( “Hello, ” “John” “\n” );  Strings separated by whitespace are concatenated when using printf

The # and ## Operators ##  Concatenates two tokens  The statement #define TOKENCONCAT( x, y ) x ## y would cause TOKENCONCAT( O, K ) to become OK

Line Numbers #line  Renumbers subsequent code lines, starting with the specified constant integer value  File name can be included  #line 100 "myFile.c" Indicates that lines are numbered from 100 beginning with next source code line and that the name of the file for the purpose of any compiler messges is “file1.c” Makes errors more meaningful Line numbers do not appear in source file

Predefined Symbolic Constants Four predefined symbolic constants  Cannot be used in #define or #undef

Some predefined symbolic constants Note: These identifiers and the defined identifier cannot be used in #define or #undef directives.

Assertions assert macro  Defined in the header  Tests value of an expression  If 0 ( false ) prints error message and calls abort  Example: assert( x <= 10 ); If x is greater than 10 when the preceding statement is encountered in a program, an error containing the line number and file name is printed and the program terminates.  If NDEBUG is defined All subsequent assert statements ignored Hence, when assertions are no longer needed, the line #define NDEBUG is inserted in the program file rather than deleting each assertion manually.

Chapter 14 Other C Topics In this chapter, you will learn: To redirect keyboard input to come from a file. To redirect screen output to be placed in a file. To write functions that use variable-length argument lists. To process command-line arguments. To assign specific types to numeric constants. To use temporary files. To process external asynchronous events in a program. To allocate memory dynamically for arrays. To change the size of memory that was dynamically allocated previously.

Introduction Several advanced topics in this chapter Operating system specific  Usually UNIX or DOS

Redirecting Input/Output on UNIX and DOS Systems Standard I/O - keyboard and screen  Redirect input and output Redirect symbol( < )  Operating system feature, not a C feature  UNIX and DOS  $ or % represents command line  Example: $ sum < input  Rather than inputting values by hand, read them from a file Pipe command( | )  Output of one program becomes input of another $ random | sum  Output of random goes to sum

Redirecting Input/Output on UNIX and DOS Systems Redirect output ( > )  Determines where output of a program goes  Example: $ random > out Output goes into out (erases previous contents) Append output ( >> )  Add output to end of file (preserve previous contents)  Example: $ random >> out Output is added onto the end of out

Variable-Length Argument Lists Functions with unspecified number of arguments  Load  Use ellipsis(... ) at end of parameter list  Need at least one defined parameter  Example: double myfunction ( int i,... );  The ellipsis is used in the prototype and definition of a function with a variable length argument list  printf is an example of a function that can take multiple arguments  The prototype of printf is defined as int printf( const char* format,... );

stdarg.h variable-length argument list type and macros

fig14_02.c (1 of 2 ) Function average takes an integer i and an unspecified number of additional arguments

fig14_02.c (2 of 2 ) va_list variable holds information for other variable-argument macros va_start macro initializes ap with i elements va_arg macro retrieves next element from ap and converts it to type double va_end macro allows the function to facilitate a normal return to main

Using Command-Line Arguments Pass arguments to main on DOS or UNIX  Define main as int main( int argc, char *argv[] )  int argc Number of arguments passed  char *argv[] Array of strings Has names of arguments in order  argv[ 0 ] is first argument  Example: $ mycopy input output argc: 3 argv[ 0 ]: “mycopy" argv[ 1 ]: "input" argv[ 2 ]: "output"

fig14_03.c (1 of 2 ) Notice that main takes arguments argc and argv The program is passed three arguments: the name of the program, the name of the file to be read from, and the name of the file to write to. The program attempts to open the file specified by argv[1] for reading......then attempts to open the file specified by argv[2] for writing. The program takes each character from inFilePtr and writes them to outFilePtr

fig14_03.c (2 of 2 )

Notes on Compiling Multiple Source-File Programs Programs with multiple source files  Function definition must be in one file (cannot be split up)  Global variables accessible to functions in same file Global variables must be defined in every file in which they are used  Example: If integer flag is defined in one file To use it in another file you must include the statement extern int flag;  extern States that the variable is defined in another file  Function prototypes can be used in other files without an extern statement Have a prototype in each file that uses the function

Program Termination with exit and atexit Function exit  Forces a program to terminate  Parameters – symbolic constants EXIT_SUCCESS or EXIT_FAILURE  Returns an implementation-defined value  Example: exit( EXIT_SUCCESS ); Function atexit atexit( functionToRun );  Registers functionToRun to execute upon successful program termination atexit itself does not terminate the program  Register up to 32 functions (multiple atexit() statements) Functions called in reverse register order  Called function cannot take arguments or return values

fig14_04.c (1 of 2 ) atexit function instructs program to call function print when the program terminates exit function forces program to terminate

fig14_04.c (2 of 2 ) print function is called at program termination

volatile Type Qualifier volatile qualifier  Variable may be altered outside program  Variable not under control of program  Variable cannot be optimized

Suffixes for Integer and Floating-Point Constants C provides suffixes for constants  unsigned integer – u or U  long integer – l or L  unsigned long integer – ul, lu, UL or LU  float – f or F  long double – l or L  Examples: 174u 467L 3451ul  If integer constant is not suffixed type determined by first type capable of storing a value of that size ( int, long int, unsigned long int )  If floating point not suffixed of type double

More on Files C can process binary files  Not all systems support binary files Files opened as text files if binary mode not supported  Binary files should be used when rigorous speed, storage, and compatibility conditions demand it  Otherwise, text files are preferred Inherent portability, can use standard tools to examine data Function tmpfile  Opens a temporary file in mode "wb+" Some systems may process temporary files as text files  Temporary file exists until closed with fclose or until program terminates Function rewind  Positions file pointers to the beginning of the file

Binary file open modes

fig14_06.c (1 of 3 ) tmpfile function creates a temporary file

fig14_06.c (2 of 3 ) The program takes characters from filePtr and places them in tempFilePtr, converting tabs into spaces The program then takes characters from tempFilePtr and places them in filePtr.

fig14_06.c (3 of 3 )

Signal Handling Signal  Unexpected event, can terminate program Interrupts ( c), illegal instructions, segmentation violations, termination orders, floating-point exceptions (division by zero, multiplying large floats) Function signal  Traps unexpected events  Header  Receives two arguments: a signal number and a pointer to the signal handling function Function raise  Takes an integer signal number and creates a signal

signal.h standard signals

fig14_08.c (1 of 3 ) signal function instructs program to call signalHandler if a SIGINT signal is detected raise function causes a SIGINT signal to occur

fig14_08.c (2 of 3 )

fig14_08.c (3 of 3 ) signal function must be called again after a signal occurs

Dynamic Memory Allocation: Functions calloc and realloc Dynamic memory allocation  Can create dynamic arrays calloc( nmembers, size )  nmembers – number of elements  size – size of each element  Returns a pointer to a dynamic array  Key difference between malloc and calloc is that calloc clears the memory it allocates and malloc does not realloc( pointerToObject, newSize )  pointerToObject – pointer to the object being reallocated  newSize – new size of the object  Returns pointer to reallocated memory  Returns NULL if cannot allocate space  If newSize equals 0 then the object pointed to is freed  If pointerToObject equals 0 then it acts like malloc

Unconditional Branching with goto Unstructured programming  Use when performance crucial  break to exit loop instead of waiting until condition becomes false goto statement  Changes flow control to first statement after specified label  A label is an identifier followed by a colon (i.e. start: )  Quick escape from deeply nested loop goto start;

Performance Tip The goto statement can be used to exit deeply nested control structures efficiently.

fig14_09.c Labels for use with goto statement goto statement sends program to specified label

The End Thank you very much!