Transcript Preprocessing
C/C++ Training
Programming C/C++ on Eclipe
Trình bày: Ths HungNM
Introduction preprocessor.
Preprocessing Logical Preprocessor Directives Standard Preprocessing Macros Error Generation Using the assert() Macro
The Preprocessor
EcoSoftware
Training C/C++
2
Introduction preprocessor
The preprocessor is powerful tool.
It also can be a source of hard-to-find bugs.
It can be easily be misused to create program that are almost impossible to understand.
The preprocessor is controlled by processing directive that begin a # character.
C Program
EcoSoftware
Training C/C++
Modified C program Object code
3
Preprocessing
Including Header Files A header file is any external file whose contents It use of the #include preprocessor directive.
Syntax : • #include
Declaring the variable as external to the current file using the extern keyword.
Syntax : • extern datatype namevariable; • Example : extern int number;
EcoSoftware
Training C/C++
4
Preprocessing
Macro definition.
The #define directive defines a macro.
The #undefine directive remove a macro definition. Syntax : • #define identifer replacement-list Example : • #define PI 3.14159265
• #define Black White Advance macro definition.
• It make program easier to read.
• It make program easier to modify • It help avoid inconsistencies and topographical error.
– Example : Numerical constant like : 3.14149, but some time 3.1415
EcoSoftware
Training C/C++
5
Preprocessing
Macro definition.
Advance macro definition • Making minor changes to syntax of C program.
– Example : #define BEGIN { – #define END } • Renaming types.
– Exampe : #define BOOL int • Controlling conditional compilation.
– Example : #define DEBUG
EcoSoftware
Training C/C++
6
Preprocessing
Macros That Look Like Functions Allows parameters to be specified, which may themselves be replaced by argument values, Syntax : • #define identifer(x1,x2,..,xn) replacement list Example : • #define max(x, y) x>y ? x : y • Call : result = myval>99 ? myval : 99; • It mean : result = max(myval, 99);
EcoSoftware
Training C/C++
7
Preprocessing
Preprocessor Directives on Multiple Lines using the statement continuation character, \.
Example : • #define min(x, y) \ ((x)<(y) ? (x) : (y)) Strings As Macro Arguments Example: #define MYSTR "This string" Call : printf("%s", MYSTR);
EcoSoftware
Training C/C++
8
Preprocessing
Joining Two Results of a Macro Expansion you may wish to generate two results in a macro and join them together Using two characters ## serves to separate the parameters.
Syntax : • #define join(a, b) a##b Example : • strlen(join(var, 123)); • It will be result : strlen(var123);
EcoSoftware
Training C/C++
9
Logical Preprocessor Directives
Conditional Compilation Syntax : #if defined identifier #endif Or #if !defined identifier #endif Or #if !defined block1 #define block1 /* Block of code you do not */ /* want to be repeated. */ #endif
EcoSoftware
Training C/C++
10
Logical Preprocessor Directives
Directives Testing for Specific Values Using #if directive expression.
Syntax : to test the value of a constant #if constant_expression #endif Example : #if CPU == Pentium4 printf("\nPerformance should be good." ); #endif
EcoSoftware
Training C/C++
11
Logical Preprocessor Directives
Multiple-Choice Selections Using #if, #elseif, #else derective for excecute statements.
Syntax : #if constant_expression #elseif constant_expression #elseif constant_expression #else #endif Example : #if CPU == Pentium4 printf("\nPerformance should be good." ); #else printf("\nPerformance may not be so good." ); #endif
EcoSoftware
Training C/C++
12
Standard Preprocessing Macros
Using __DATE__ macro provides a string representation of the date.
Using __TIME__, provides a string containing the value of the time.
Using __FILE__ , A string literal containing the name of the file being compiled.
__LINE__ A decimal constant containing the current source line number. __STDC_VERSION__ : This macro expands to the C Standard's version number.
Example : printf("\nProgram last compiled at %s on %s", __TIME__, __DATE__ );
EcoSoftware
Training C/C++
13
Error Generation
A
preprocessor error directive
causes the preprocessor to generate an error message and causes the compilation to fail.
Syntax : # error token-sequence Example : #define BUFFER_SIZE 255 #if BUFFER_SIZE < 256 #error "BUFFER_SIZE is too small." #endif generates the error message: BUFFER_SIZE is too small.
EcoSoftware
Training C/C++
14
Using the assert() Macro
The assert() macro is defined in the standard library header file
Using #ndefine derectives for Switch on or off assertions.
Syntax: #undef NDEBUG #include EcoSoftware Training C/C++ 15 • Thank You EcoSoftware Training C/C++ 16End