我在 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/