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

Dan*_*ard 4 c

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

#define stb_sb_free(a) ((a) ? free(stb__sbraw(a)),0 : 0)
Run Code Online (Sandbox Code Playgroud)

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

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

#define stb_sb_add(a,n) (stb__sbmaybegrow(a,n), stb__sbn(a)+=(n), &(a)[stb__sbn(a)-(n)])
Run Code Online (Sandbox Code Playgroud)

似乎正在运行多个语句,但是那不需要分号吗?

mas*_*oud 5

这条线会发生什么

#define stb_sb_free(a) ((a) ? free(stb__sbraw(a)),0 : 0)
Run Code Online (Sandbox Code Playgroud)

是,如果与a对应truefree(stb__sbraw(a))则将首先执行,然后0由于将返回,0

通常,将对所有用逗号分隔的表达式进行求值,但结果具有最右边表达式的类型和值。