c - C/Embedded C #define 语句中的括号 do
问题描述
我在 cc2640 mcu 的 .h 文件中看到以下内容:
#define ADC_STATUS_SUCCESS (0)
根据我的 C 知识,编译器被告知将 ADC_STATUS_SUCCESS 的值放在它出现的任何地方,即(0)
. 但是 put 有什么区别0
呢?
解决方案
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)
我非常怀疑情况是否如此,没有人在他们的头脑中会写出这样可憎的东西。这个定义很可能是出于习惯。
推荐阅读
- javascript - 为数组中的多个但相同的对象附加唯一值
- python - 无法传递 python 变量去二进制
- .htaccess - 重定向页面页面和结束斜线
- c# - .NET Core 3 无法加载 ECC 私钥
- python - 为什么我在使用 get 请求读取数据时得到 KeyError?
- java - Failure in Data Transmission Between Child Activity and Parent Activity
- javascript - react-native蓝牙设备不断断开连接
- hangouts-chat - 是否可以在用户等待响应时从机器人服务器向用户发送动画(例如“打字...”或“...”)?
- cuda - 如何解释 GPU 和 CPU 串行版本的均值滤波器的这些结果?
- python-3.x - 将 numpy ndarray 转换为 dict 但数组具有形状 ()