c++ - 带括号和不带括号定义的宏 - 重新定义错误

标签 c++ c macros

#defineWITHBRACKETS (1)#defineWITHBRACKETS 1 有什么区别?

我在两个位置定义了具有相同名称的宏(我知道这是一件坏事,可能会导致重新定义警告),但它们的定义不同。

那么,当我编译代码库时,为什么编译器会说 #define WITHBRACKETS (1)#define WITHBRACKETS 1 的不兼容的重新定义?

最佳答案

预处理器提示这是一个不兼容的重定义,因为它确实是!

宏是一个标记,只要预处理器遇到它,它就会被替换为 0 个或多个其他标记的序列。

#defineWITHBRACKETS 1 将定义一个将被单个其他标记替换的标记。

#defineWITHBRACKETS (1) 将定义一个标记,该标记将被三个个其他标记替换。

那些不兼容的东西。预处理器不知道也不关心它们在源中的语义是否相同。它所关心的只是标记的序列。

关于c++ - 带括号和不带括号定义的宏 - 重新定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46476381/

相关文章:

c++ - 指针值未正确传递给重载的等于运算符 (C++)

c++ - 无法使用c在文件中写入二进制数据

c - 如何使用c中的标记来计算出现次数

c - 打印编译时保存的文件名

python - 为什么在使用 Python/C API 时会出现此段错误?

c++ - 检查 STL 中的空交集

c - Pthread 参数

c - 进程不能在 linux 上被杀死

objective-c - 理解@weakify 宏

python - 使用Hy宏生成Python代码