c - 在定义预处理器语句中使用括号

标签 c c-preprocessor

所以我想知道什么时候使用

 #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/

相关文章:

c++ - 具有三个参数的typedef是什么意思?

csv - 通过cmake用逗号定义值

c - 如何递归地unifdef

c++ - 在c程序中获取指向C++函数库的指针

c - 为什么链接的二进制文件包含使用过的目标文件的文件名,如何删除它们?

c - 如何暂停C程序?

c++ - 在编译期间使用#pragma message() 打印#define 的完全评估结果

c - 在 if else 条件之间使用#ifdef

c - 为什么程序退出后rmdir会删除文件夹?(在Win7中使用Dev C++)

c - 整数溢出漏洞