#defineWITHBRACKETS (1)
和 #defineWITHBRACKETS 1
有什么区别?
我在两个位置定义了具有相同名称的宏(我知道这是一件坏事,可能会导致重新定义警告),但它们的定义不同。
那么,当我编译代码库时,为什么编译器会说 #define WITHBRACKETS (1)
是 #define WITHBRACKETS 1
的不兼容的重新定义?
最佳答案
预处理器提示这是一个不兼容的重定义,因为它确实是!
宏是一个标记,只要预处理器遇到它,它就会被替换为 0 个或多个其他标记的序列。
#defineWITHBRACKETS 1
将定义一个将被单个其他标记替换的标记。
#defineWITHBRACKETS (1)
将定义一个标记,该标记将被三个个其他标记替换。
那些不兼容的东西。预处理器不知道也不关心它们在源中的语义是否相同。它所关心的只是标记的序列。
关于c++ - 带括号和不带括号定义的宏 - 重新定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46476381/