所以我想知道什么时候使用
#define xxx (yyy)
对比
#define xxx yyy
我的项目包含一个文件,该文件在 AD0_ADMD_CT 处有自己的定义,如果我想重新定义它们,我是否需要在定义中使用 (AD0_ADMD_CT) 或仅使用 AD0_ADMD_CT?
AD0_ADMD_CT 定义为
#define AD1_ADMD_CT (IO_AD1.ADMD.bit.CT)
所以要么是
#define AD0_COMPARETIME (AD0_ADMD_CT)
或
#define AD0_COMPARETIME AD0_ADMD_CT
最佳答案
两者没有区别。在第一种情况下,XXX
被替换为 yyy
,在第二种情况下,被 (yyy)
替换。使用括号的约定是为了避免可能发生的逻辑错误。例如,您将加法函数定义为:
#define f(N) N+N
int a = f(5)*f(5)
预期值为 10*10 = 100 ,但输出为 35 因为在编译时变为
int a = 5+5*5+5,
因此使用运算符偏好规则,输出发生变化。
所以括号避免了这些类型的错误。
关于c - 在定义预处理器语句中使用括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22155634/