首页 > 解决方案 > C/Embedded C #define 语句中的括号 do

问题描述

我在 cc2640 mcu 的 .h 文件中看到以下内容:

#define ADC_STATUS_SUCCESS         (0)

根据我的 C 知识,编译器被告知将 ADC_STATUS_SUCCESS 的值放在它出现的任何地方,即(0). 但是 put 有什么区别0呢?

标签: cc-preprocessortexas-instruments

解决方案


put 有什么区别0

没有,如果你不写疯狂的代码。通常对包含表达式的宏使用括号,以避免在使用它们时出现与运算符优先级和类似内容相关的意外错误。但是,在这种情况下,如果在表达式中使用某些东西,则定义为0或 as是相同的。(0)

我所说的“疯狂代码”是什么意思?好吧,两者之间的唯一区别可以在以下内容中看到:

void func(int x) { /* ... */ };

#define ADC_STATUS_SUCCESS 0
func ADC_STATUS_SUCCESS;       // INVALID

#define ADC_STATUS_SUCCESS (0)
func ADC_STATUS_SUCCESS;       // VALID (for the love of God NEVER do this)

我非常怀疑情况是否如此,没有人在他们的头脑中会写出这样可憎的东西。这个定义很可能是出于习惯。


推荐阅读