##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# Preprocessor

From cppreference.com
< c

The preprocessor is executed at translation phase 4, before the compilation. The result of preprocessing is single file which is then passed to the actual compiler.

### [edit] 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`, `endif`, `line`, `error`, `warning`, `pragma`) [1]
- arguments (depends on the instruction)
- line break

The null directive (`#` followed by a line break) is allowed and has no effect.

### [edit] Capabilities

The preprocessor has the source file translation capabilities:

- conditionally compile of parts of source file (controlled by directive `#if`, `#ifdef`, `#ifndef`, `#else`, `#elif` and `#endif`).
- replace text macros while possibly concatenating or quoting identifiers (controlled by directives `#define` and `#undef`, and operators `#` and `##`)
- include other files (controlled by directive `#include`)
- cause a warning (controlled by directive `#warning`)
- cause an error (controlled by directive `#error`)

The following aspects of the preprocessor can be controlled:

- implementation defined behavior (controlled by directives `#pragma`)
- file name and line information available to the preprocessor (controlled by directives `#line`)

### [edit] Footnotes

1. ↑ 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.

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=c/preprocessor&oldid=61451"