# The C Preprocessor

## Table of Contents

- 1 Overview
  - 1.1 Character sets
  - 1.2 Initial processing
  - 1.3 Tokenization
  - 1.4 The preprocessing language
- 2 Header Files
  - 2.1 Include Syntax
  - 2.2 Include Operation
  - 2.3 Search Path
  - 2.4 Once-Only Headers
  - 2.5 Alternatives to Wrapper #ifndef
  - 2.6 Computed Includes
  - 2.7 Wrapper Headers
  - 2.8 System Headers
- 3 Macros
  - 3.1 Object-like Macros
  - 3.2 Function-like Macros
  - 3.3 Macro Arguments
  - 3.4 Stringizing
  - 3.5 Concatenation
  - 3.6 Variadic Macros
  - 3.7 Predefined Macros
    - 3.7.1 Standard Predefined Macros
    - 3.7.2 Common Predefined Macros
    - 3.7.3 System-specific Predefined Macros
    - 3.7.4 C++ Named Operators
  - 3.8 Undefining and Redefining Macros
  - 3.9 Directives Within Macro Arguments
  - 3.10 Macro Pitfalls
    - 3.10.1 Misnesting
    - 3.10.2 Operator Precedence Problems
    - 3.10.3 Swallowing the Semicolon
    - 3.10.4 Duplication of Side Effects
    - 3.10.5 Self-Referential Macros
    - 3.10.6 Argument Prescan
    - 3.10.7 Newlines in Arguments
- 4 Conditionals
  - 4.1 Conditional Uses
  - 4.2 Conditional Syntax
    - 4.2.1 Ifdef
    - 4.2.2 If
    - 4.2.3 Defined
    - 4.2.4 Else
    - 4.2.5 Elif
    - 4.2.6 `__has_attribute`
    - 4.2.7 `__has_cpp_attribute`
    - 4.2.8 `__has_include`
  - 4.3 Deleted Code
- 5 Diagnostics
- 6 Line Control
- 7 Pragmas
- 8 Other Directives
- 9 Preprocessor Output
- 10 Traditional Mode
  - 10.1 Traditional lexical analysis
  - 10.2 Traditional macros
  - 10.3 Traditional miscellany
  - 10.4 Traditional warnings
- 11 Implementation Details
  - 11.1 Implementation-defined behavior
  - 11.2 Implementation limits
  - 11.3 Obsolete Features
    - 11.3.1 Assertions
- 12 Invocation
- 13 Environment Variables
- GNU Free Documentation License
  - ADDENDUM: How to use this License for your documents
- Index of Directives
- Option Index
- Concept Index

The C preprocessor implements the macro language used to transform C, C++, and Objective-C programs before they are compiled. It can also be useful on its own.

Copyright © 1987-2019 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation. A copy of the license is included in the section entitled “GNU Free Documentation License”.

This manual contains no Invariant Sections. The Front-Cover Texts are (a) (see below), and the Back-Cover Texts are (b) (see below).

(a) The FSF’s Front-Cover Text is:

A GNU Manual

(b) The FSF’s Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development.