我在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)])
它似乎运行多个语句,但是不需要分号?
答案 0 :(得分:4)
这一行发生了什么
#define stb_sb_free(a) ((a) ? free(stb__sbraw(a)),0 : 0)
是,如果a
与true
相对应,则会执行第一个free(stb__sbraw(a))
,然后0
将返回,0
。
通常,将对所有用逗号分隔的表达式进行求值,但结果具有最右侧表达式的类型和值。 semicolon可以使用相同的功能,但使用逗号可以缩短代码。