preprocessor directives in c

The C Preprocessor is not part of the compiler, but is a separate step in the compilation process. In simplistic terms, a C Preprocessor is just a text substitution tool and they instruct compiler to do required pre-processing before actual compilation. We’ll refer to the C Preprocessor as the CPP.

All preprocessor commands begin with a pound symbol (#). It must be the first nonblank character, and for readability, a preprocessor directive should begin in first column. Following section lists down all important preprocessor directives:

DirectiveDescription
#defineSubstitutes a preprocessor macro
#includeInserts a particular header from another file
#undefUndefines a preprocessor macro
#ifdefReturns true if this macro is defined
#ifndefReturns true if this macro is not defined
#ifTests if a compile time condition is true
#elseThe alternative for #if
#elif#else an #if in one statement
#endifEnds preprocessor conditional
#errorPrints error message on stderr
#pragmaIssues special commands to the compiler, using a standardized method

Preprocessors Examples

Analyze the following examples to understand various directives.

#define MAX_ARRAY_LENGTH 20

This directive tells the CPP to replace instances of MAX_ARRAY_LENGTH with 20. Use#define for constants to increase readability.

#include <stdio.h>
#include "myheader.h"

These directives tell the CPP to get stdio.h from System Libraries and add the text to the current source file. The next line tells CPP to get myheader.h from the local directory and add the content to the current source file.

#undef  FILE_SIZE
#define FILE_SIZE 42

This tells the CPP to undefine existing FILE_SIZE and define it as 42.

#ifndef MESSAGE
   #define MESSAGE "You wish!"
#endif

This tells the CPP to define MESSAGE only if MESSAGE isn’t already defined.

#ifdef DEBUG
   /* Your debugging statements here */
#endif

This tells the CPP to do the process the statements enclosed if DEBUG is defined. This is useful if you pass the -DDEBUG flag to gcc compiler at the time of compilation. This will define DEBUG, so you can turn debugging on and off on the fly during compilation.

Predefined Macros

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.

MacroDescription
__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.

 

More in sem1
Storage Classes in C
Storage Classes in C

Storage classes in c A storage class defines the scope (visibility) and life-time of variables and/or functions within a C...

Close