Q1 What is C Preprocessor? Types of C Preprocessors? Marco expansion, File Inclusion, Conditional Compilation, Miscellaneous Directives
Program: 145
What is C Preprocessor? Types of C Preprocessors? Marco expansion, File Inclusion, Conditional Compilation, Miscellaneous Directives
Definition:
It is a program that processes our source program before it is passed to the compiler. (C Preprocessor commands also known as directives)
C PREPROCESSOR
There are four types of directives exists in C preprocessor
- Macro expansion
- File Inclusion
- Conditional Compilation
- Miscellaneous directives
MACRO EXPANSION
#define PI 3.14 #define AND && #define OR ||
Macros with Arguments
#define AREA(x) (3.14 * x * x)
FILE INCLUSION
#include<stdio.h> #include<math.h>
CONDITIONAL COMPILATION
ifdef
#include<stdio.h> int main() { #ifdef INTEL code suitable for an Intel PC #else code suitable for a Motorola PC #endif code common to both the computer }
ifndef
#include<stdio.h> #define INTEL int main() { #ifndef INTEL code suitable for an Intel PC #else code suitable for a Motorola PC #endif code common to both the computer }
if and elif
include int main() { #if ADAPTER==VGA code for video graphics array #elif ADAPTER==SVGA code for super video graphics array #endif // ADAPTER }
MISCELLANEOUS DIRECTIVES
There are two more preprocessor directives available, through they are not very commonly used.
a. #undef b. #pragma
#undef
It is used to undefine a macro that has been earlier #defined, the directive,
#undef PI
#pragma startup and #pragma exit
These directives allow us to specify functions that are called upon program startup (before main()) or program exit (just before the program terminates)
include void fun1(); void fun2(); pragma startup fun1 pragma exit fun2 int main() { printf("Inside main\n"); return 0; } void fun1() { printf("Inside fun1\n"); } void fun2() { printf("Inside fun2\n"); }
Output
Inside fun1 Inside main Inside fun2
#pragma warn
#pragma warn -rvl /* return value */ #pragma warn -par /* parameter not used */ #pragma warn -rch /* unreachable code */