As the “pre” means beforehand, similarly it means processing something before passing it on further. The preprocessor is a program that processes the source program before it is passed to the compiler. So we can say that it is a separate process in the compilation.
Preprocessor commands (often known as directives) form what can almost be considered a language within the C language. We can certainly write C programs without knowing anything about the preprocessor or its facilities.
It gives specific features called directives. A preprocessor directive begins with “#” symbol at the starting of the program. These directives are processed before the compilation of the program.
The following are preprocessor directives:
- Macro expansion
- File inclusion
- Conditional Compilation
- Miscellaneous directives
Macro Definition
macro is defined by #define
in a program. It is used to define some constant in a program that can be used anywhere during the entire program. This constant becomes global value.
#define PI 3.1415
This statement is called ‘macro definition’ or more commonly, just a ‘macro’.
Its purpose: during preprocessing, the preprocessor replaces every occurrence of PI in the program with a 3.1415 value.
You may try this program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdio.h> #define PI 3.1415 //macro int main() { float rad, area; printf("Enter the radius of a circle: "); scanf("%f", &rad); //PI is used here area = PI * rad * rad; printf("Area of a circle: %.2f", area); return 0; } |
File inclusion
#include
is used to include some files into the program. These are usually header files, but sometimes maybe any text file. The command looks something like this:
#include <stdio.h>
stdio.h
is the header file that contains the library function that is used in a program such as printf, scanf, etc. #include is a preprocessor directive.
Check the example of macro mentioned above where stdio.h file is defined by #include. If we do not include this header file then we will not be able to use the in-built function.
Conditional Compilation
The C preprocessor provides a series of directives for conditional compilation: #if, #elif, #else, #ifdef, #ifndef, and #endif. These commands cause the preprocessor to include or exclude sections of the source code from compilation depending on certain conditions.
Conditional compilation is used for three main purposes:
- Optionally include debugging code
- Enclose non-portable code
- Guard against multiple inclusion of header files.
Syntax:
#ifdef, #endif, #if, #else, #ifndef
#ifndef
1 2 3 | #ifndef TEXT #define TEXT "Hello World" #endif |
It tells the C Preprocessor to define TEXT only if TEXT isn’t already defined.
#ifdef Directive
1 2 3 | #ifdef MACRO // conditional codes #endif |
1 2 3 4 5 | #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif |
You can also add nested conditional to your #if...#else
using #elif
1 2 3 4 5 6 7 8 9 | #if expression // conditional codes if expression is non-zero #elif expression1 // conditional codes if expression is non-zero #elif expression2 // conditional codes if expression is non-zero #else // conditional if all expressions are 0 #endif |
Miscellaneous directives
#undef is used to undefine a defined macro variable.
1 2 | #undef FILE_SIZE #define FILE_SIZE 38 |
It tells the C Preprocessor to undefine existing FILE_SIZE and define it as 38.
#pragma is used to call a function before and after the main function in a C program.
#undef, #pragma
Predefined Macros
Macro | Value |
---|---|
__DATE__ | A string containing the current date |
__FILE__ | A string containing the file name |
__LINE__ | An integer representing the current line number |
__STDC__ | If follows ANSI standard C, then the value is a nonzero integer |
__TIME__ | A string containing the current date. |
Example: print current time and date using predefined function.
1 2 3 4 5 6 | #include <stdio.h> int main() { printf("Current time: %s",__TIME__); printf("Current date: %s",__DATE__); } |
You can run the above program in the compiler and the Current time and date will be displayed on the screen.