c - 这个 C 宏中逗号的用途是什么?

标签 c

我在 stretchy_buffer.h 中看到了类似的东西:

#define stb_sb_free(a) ((a) ? free(stb__sbraw(a)),0 : 0)

调用 free() 后的 ,0 的作用是什么?

同样,这里有两个奇怪的逗号:

#define stb_sb_add(a,n) (stb__sbmaybegrow(a,n), stb__sbn(a)+=(n), &(a)[stb__sbn(a)-(n)])

看起来它正在运行多个语句,但这不需要分号吗?

最佳答案

这一行发生了什么

#define stb_sb_free(a) ((a) ? free(stb__sbraw(a)),0 : 0)

是,如果a对应true,首先执行free(stb__sbraw(a)),然后执行0 将因 ,0 而返回。

一般来说,所有用逗号分隔的表达式都会被计算,但结果具有最右边表达式的类型和值。

关于c - 这个 C 宏中逗号的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46029580/

相关文章:

c - 等待进程组时 waitpid() 没有子进程错误

c++ - 计算循环中的数字总和

c - Linux 设备驱动读写函数问题

c++ - C中一个线程停止另一个线程

在 struct 中为 char 数组创建指针大小的内存

c - C 中的输出文本 block

c++ - GNU/Linux 中 "drawing"抽象的绝对最低级别是什么?

c - 打印返回结构的成员

php - 尝试使用 C 向本地服务器发送 POST 请求

c - 知道 C 会让我用任何其他语言编写更好的代码的例子是什么?