C-preprocessor process our source code before it is passed to the compiler. Each preprocessor statement begins with a # symbol.
Following section lists down all important preprocessor directives:
|#define||Substitutes a preprocessor macro.|
|#include||Inserts a particular header from another file.|
|#undef||Undefines a preprocessor macro.|
|#ifdef||Returns true if this macro is defined.|
|#ifndef||Returns true if this macro is not defined.|
|#if||Tests if a compile time condition is true.|
|#else||The alternative for #if|
|#elif||#else an #if in one statement|
|#endif||Ends preprocessor conditional|
|#error||Prints error message on stderr|
|#pragma||Issues special commands to the compiler, using a standardized method|
Macro Expansion: It is also known as simple macro.
#define pi 3.14
#define and &&
#define or ||
Macro’s with Argument: Macros can have argument just like functions.
#define area(x) 3.14*r*r
#define sq (a) a*a
|1.||In macro call the preprocessor replaces the macro template with its macro expansion.||In function call the control is passed to a function along with its arguments and returned back from the function.|
|2.||Execution is faster than Functions.||Execution is slower than Macros.|
|3.||Make the program size bigger.||Make the program compact.|
|4.||Macro’s are brief.||Function can be lengthy.|
|5.||Macro is simple||Function is complex|
|6.||Make the source code small||Function make the source code lengthy|
#define FILE_SIZE 42
This tells the CPP to undefine existing FILE_SIZE and define it as 42.
#define MESSAGE "You wish!"
This tells the CPP to define MESSAGE only if MESSAGE isn't already defined.
ANSI C defines a number of macros. Although each one is available for your use in programming, the predefined macros should not be directly modified.
__DATE__ The current date as a character literal in "MMM DD YYYY" format
__TIME__ The current time as a character literal in "HH:MM:SS" format
__FILE__ This contains the current filename as a string literal.
__LINE__ This contains the current line number as a decimal constant.
__STDC__ Defined as 1 when the compiler complies with the ANSI standard.
Let's try the following example:
printf("File :%s\n", __FILE__ );
printf("Date :%s\n", __DATE__ );
printf("Time :%s\n", __TIME__ );
printf("Line :%d\n", __LINE__ );
printf("ANSI :%d\n", __STDC__ );
a) #pragma startup --> This directive allow us to execute function before main () function.
syntax: #pragma startup fun
b) #pragma exit --> This directive allow us to execute function after main () function.
syntax: #pragma exit fun
Both startup and exit functions should neither receive nor return any value. We can use more than one function to be executed at startup but they will be executed in reverse order.
#pragma warm --> This directive tells the compiler whether the warning will be shown or not.
a) #pragma warn –rvl --> return value warning does not display even if return keyword is not used in a function.
b) #pragma warn – par --> parameter not used warning does not display even if variable not used in a parameter.
c) #pragma warn – rch --> unreachable code warning does not display even if any code of statement is unreachable.