Preprocessing Directives

preprocessing-file : group opt

group :
group-part
group group-part

group-part :
pp-tokens opt new-line
if-section
control-line

if-section : if-group elif-groups opt else-group opt endif-line

if-group :
#if restricted-constant-expression new-line group opt
#ifdef identifier new-line group opt
#ifndef identifier new-line group opt

elif-groups :
elif-group
elif-groups elif-group

elif-group : #elif restricted-constant-expression new-line group opt

else-group : #else new-line group opt

endif-line : #endif new-line

control-line :
#include "path-spec" new-line /* Programmer-supplied header files */
#include <path-spec> new-line /* Standard C header files */
#define identifier replacement-list new-line /* Macro without parameters */
#define identifier (identifier-listopt ) replacement-list new-line
#undef identifier new-line
#line digit-sequence new-line
#line digit-sequence "filename " opt new-line
#line digit-sequence preprocessing-tokens new-line
#error preprocessor-tokens opt new-line
#pragma pragma-directive opt new-line
# new-line

replacement-list : pp-tokens opt

new-line : the newline character

pp-tokens :
preprocessing-token
pp-tokens preprocessing-token