这个C宏中逗号的目的是什么?

时间:2017-09-04 02:33:24

标签: c

我在stretchy_buffer.h中看到类似的内容:

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

致电,0之后free()的目的是什么?

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

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

它似乎运行多个语句,但是不需要分号?

1 个答案:

答案 0 :(得分:4)

这一行发生了什么

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

是,如果atrue相对应,则会执行第一个free(stb__sbraw(a)),然后0将返回,0

通常,将对所有用逗号分隔的表达式进行求值,但结果具有最右侧表达式的类型和值。 semicolon可以使用相同的功能,但使用逗号可以缩短代码。