预处理器伪指令
预处理是在编译之前处理文本的初始阶段。 预处理器伪指令是源文件的行,其中第一个非空格字符是 #,这将它们与其他文本行区分开。 每个预处理器伪指令的作用是对文本进行更改,结果是对不包含伪指令或注释的文本进行变换。 编译器可以选择将预处理后的文本输出到具有 .i 后缀的文件。 预处理始终是编译的初始阶段,即使文本已经过预处理也是如此。
预处理器伪指令由下列各项组成:
- 宏定义伪指令,用于将当前文件中的令牌替换为指定的替换令牌
- 文件包含伪指令,用于在当前文件中嵌入文件
- 条件编译伪指令,用于有条件地编译当前文件的部分
- 消息生成伪指令,用于控制诊断消息的生成
断言指令( 扩展名 IBM ),用于指定程序运行系统的属性- 空伪指令 (#),不执行任何操作
- 编译指示伪指令,用于将特定于编译器的规则应用于指定的代码段
- C++11 中采用的 C99 预处理器功能 (C++11)
预处理器伪指令以 # 令牌开头,后跟预处理器关键字。 # 标记必须显示为行上非空格的第一个字符。 # 不是伪指令名称的一部分,可以使用空格与名称分隔。
除非行的最后一个字符是 \ (反斜杠) 字符,否则预处理器伪指令以换行符结尾。 如果 \ 字符显示为预处理器行中的最后一个字符,那么预处理器会将 \ 和换行符解释为连续标记。 预处理器将删除 \ (以及以下换行符) ,并将物理源行拼接成连续逻辑行。 反斜杠与行尾字符或记录的物理结尾之间允许有空格。 但是,此空格通常在编辑期间不可见。
除了某些 #pragma 伪指令外,预处理器伪指令可以出现在程序中的任何位置。