On this page
Preprocessor
The preprocessor is executed at translation phase 4, before the compilation. The result of preprocessing is a single file which is then passed to the actual compiler.
Directives
The preprocessing directives control the behavior of the preprocessor. Each directive occupies one line and has the following format:
#character- preprocessing instruction (one of 
define,undef,include,if,ifdef,ifndef,else,elif,elifdef,elifndef(since C23),endif,line,embed(since C23),error,warning(since C23),pragma) [1] - arguments (depends on the instruction)
 - line break
 
The null directive (# followed by a line break) is allowed and has no effect.
Capabilities
The preprocessor has the source file translation capabilities:
-  conditionally compile of parts of source file (controlled by directive 
#if,#ifdef,#ifndef,#else,#elif,#elifdef,#elifndef(since C23) and#endif). -  replace text macros while possibly concatenating or quoting identifiers (controlled by directives 
#defineand#undef, and operators#and##) - include other files (controlled by directive 
#includeand checked with__has_include(since C23)) - cause an error or warning(since C23) (controlled by directive 
#erroror#warningrespectively(since C23)) 
The following aspects of the preprocessor can be controlled:
-  implementation defined behavior (controlled by directive 
#pragmaand operator_Pragma(since C99)) -  file name and line information available to the preprocessor (controlled by directives 
#line) 
Footnotes
- These are the directives defined by the standard. The standard does not define behavior for other directives: they might be ignored, have some useful meaning, or make the program ill-formed. Even if otherwise ignored, they are removed from the source code when the preprocessor is done. A common non-standard extension is the directive 
#warningwhich emits a user-defined message during compilation.(until C23) 
References
- C17 standard (ISO/IEC 9899:2018):
 - 6.10 Preprocessing directives (p: 117-129)
 - C11 standard (ISO/IEC 9899:2011):
 - 6.10 Preprocessing directives (p: 160-178)
 - C99 standard (ISO/IEC 9899:1999):
 - 6.10 Preprocessing directives (p: 145-162)
 - C89/C90 standard (ISO/IEC 9899:1990):
 - 3.8 PREPROCESSING DIRECTIVES
 
See also
| C documentation for Predefined Macro Symbols | |
| C documentation for Macro Symbol Index | |
| C++ documentation for Preprocessor | 
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
 https://en.cppreference.com/w/c/preprocessor