用括号和无括号定义的宏 - 重定义错误

-2 c c++ macros

#define WITHBRACKETS (1)和之间有什么区别#define WITHBRACKETS 1

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

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

Sto*_*ica 7

预处理器抱怨它是一个不兼容的重新定义,因为它是!

宏是一个令牌,当遇到它时,预处理器会被一个0或更多其他令牌的序列替换.

#define WITHBRACKETS 1将定义将由单个其他标记替换的标记.

#define WITHBRACKETS (1)将定义一个令牌以替换为其他三个令牌.

那些不兼容的东西.预处理器不知道或不关心它们在源中的语义含义是否相同.它所关心的只是令牌序列.