c - #define 多个元素用逗号分隔的语句

标签 c c-preprocessor

我在看这样的东西:

#define foo(x)   \
    (((a > b) ?  \
      0 : 1),    \
     (c ? 2 : 3), \
     (d ? 4 : 5))

我不确定如何解释这个。有人可以帮我吗?

最佳答案

本质上,就终止 #define 语句而言,\ 会忽略换行符,因此每次您编写 foo(var)在您的代码中,它将替换为

((((a > b) ?  
  0 : 1),    
 (c ? 2 : 3), 
 (d ? 4 : 5))

逗号运算符并没有做很多事情,除了由逗号运算符分隔的语句组成的语句的最终“返回”值是最右边的值。

所有这些都被解释过了,这并不是一个非常有效的 #define 因为你使用了 a,b, #define 中的 cd 并且只引用 x 作为参数

关于c - #define 多个元素用逗号分隔的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758491/

相关文章:

c - 从编码的哈希值中导出 Argon2 类型是否安全?

c - 锁定帧缓冲设备

c++ - ifdef/ifndef 的解决方法

c++ - 预处理器指令 conio.h c++

c++ - 第 3 方库冲突定义/重新定义

c - _Generic() 宏不扩展

JAVA JNI C 调试器

c - #define x 2|0 在 C 中

c - 我应该怎么做才能从命令行获取 c 程序的整个返回值?

c - 如何检测extern "C"生效