A Preprocessor in a C programming language is a Program that processes source code of a C program, expanding Macro Definitions, File Inclusions and more.
Only through Preprocessor directives, you are able to include library files in your C program.
Preprocessing in C happens before compilation. Part of the Source code is replaced with Preprocessing expressions where ever encountered. So the size of Total code increases before passing to the Compiler.
C Preprocessor Directives
All preprocessor directives start with a Pound Symbol #. There are 3 types of Preprocessor Directives
- Macro Expansion
 - File Inclusion
 - Conditional Compilation and Run
 
1. Macro Expansion Preprocessor Directives
Macro is like a function or shortcut that can be used to achieve code reuse. Syntax of defining a macro is as follows.
#define NAME EXPRESSION
Example 1:
#define AREA(x) x*x
int main()
{
  int side=20;
  int area = AREA(side);
  printf("AREA=%d", area);
  return 0;
}
// AREA(side) replaced with side * side
Example 2: Proper use of Parantheses avoids unexpected results.
#define AREA(x) x*x
int main()
{
  int side=2;
  float total = 20 / AREA(side);
  printf("AREA=%d", area);
  return 0;
}
// AREA(side) replaced with side * side
// 20 / side * side
// (20/side) * side
// 10 * 2
// 20
//What you expected ???
// 20 / (2*2)
// 5
// Correction: ???
//#define AREA(x) (x*x)
2. File Inclusion Preprocessor Directives
As the name suggests, using a C Precessor directives of File Inclusion type, you are including either Library header files or User defined files. We usually include STDIO.H in our C program to use Printf and Scanf functions.
Note: Preprocessor copies all code of the included file into our C program and sends the combined single copy of code to the compiler.
C editor like TURBO C allows defining list of directories that can be searched for files in a later time. These directories fall into two types.
- Current Directory
 - Extra Specified Directories
 
Syntax:
#include "filename" (or) #include <filename>
There are two ways of including a file using preprocessor directive #include.
1. #include "filename"
This notation searches file in the CURRENT directory and Extra Specified Directory list.
2. #include <filename>
This notation searches files in only CURRENT directory. If the file is not available no error is raised.
Example: Including a header file
#include<math.h>
int main()
{
  float a = 10.3f;
  float b = sin(a);
  printf("SIN(%f)=%f", a, b);
  return 9;
}
3. Conditional Compilation Preprocessor Directives
Unlike Macro Expansion and File Inclusion preprocessor directives, these Conditional Compilation preprocessor directives are written and used inside our C Program itself.
Condition check is done using IF, ELSE and ELSE IF statements. For Conditional Compilation, directives like #ifdef, #endif, #else, #elif and #ifndef are defined is C language. These help in implementing multiple source codes and version control management in Hardware and Software environments.
The conditional directives check for EXISTENCE of a MACRO and compiles code accordingly. Find examples below for good understanding.
define AREA printf("SUCCESS");
int main()
{
  #ifdef AREA
    printf("EUROPE");
  #else
    printf("AMAZON");
  #endif
  return 9;
}
In the above example, if the MACRO AREA exists, then EUROPE is printed. Otherwise, AMAZON is printed.
#IFNDEF is the reverse of #IFDEF. IFNDEF works if the MACRO does not exist.
#UNDEF Preprocessor Directive
#undef is a special preprocessor directive in C language to Nullify or Remove Definition of existing Macros.
#define AREA printf("SUCCESS");
int main()
{
  #undef AREA
  #ifdef AREA
    printf("EUROPE");
  #else
    printf("AMAZON");
  #endif
  return 9;
}
//OUTPUT
//AMAZON
//Macro AREA is undefined. So #ifdef fails.
Online Test on C Preprocessor Directives
| 1 | C PreProcessor Directives - Online Test 1 | 
| 2 | C PreProcessor Directives - Online Test 2 |