宏(c/C++)

预处理扩展宏在没有预处理器指令的所有行 (没有 # ,因为第一个非空白字符) 以及作为一个条件编译的一部分,不要跳过一些指令的一部分。" 条件编译”指令允许您通过测试常数表达式禁止显示源文件的部分生成或确定的标识符文本块传递给编译器和哪文本块在预处理期间,从源文件中移除。

#define 指令通常用于将有意义的标识符与常数、关键字和常用的语句或表达式。 表示常数的标识符有时称为 “符号常数”或 “清单常数”。表示语句或表达式的标识符调用 “macros”。在预处理器文档,仅使用该术语 “macros”。

当宏的名称将识别在程序源文本或在其他某些预处理器命令的参数时,它将对该宏的调用。 宏名称宏体的副本替换。 如果宏接受参数,实参在宏名之后将宏体的形参进行替换。 替换处理宏调用与该主体的处理复制称为 “扩展”宏调用。

在实际情况下,宏有两种类型的。" 与对象类似的”宏不带参数,参数,而 “类似于函数的”宏可以定义接受参数,以便找到,并与的操作函数调用。 由于宏不生成实际函数调用,您有时可能会使程序快地被替换运行函数调用与宏。 (在 C++ 中,内联函数通常是首选方法。)但是,因此,如果不小心,定义并不使用这些宏可能会产生问题。 您使用参数的宏定义可能需要使用括号保留在表达式中相应的优先级。 此外,宏不正确可与副作用的表达式处理。 在参见 #define 指令 的 getrandom 示例有关更多信息。

在定义了宏,不能重定义为不同的值不先移除原始定义。 但是,您可以重新定义具有相同的定义的宏。 因此,同一个定义可以出现多次程序。

#undef 指令移除宏的定义。 一旦已移除该定义,可以重新定义宏到不同的值。 #define 指令#undef 指令 讨论 #define 和 #undef 指令,分别。

有关更多信息,请参见

请参见

其他资源

C/C++预处理器引用