在glibc<;=2.23,为什么“0;”在互斥锁宏中使用?

在glibc<;=2.23,为什么“0;”在互斥锁宏中使用?,c,malloc,c-preprocessor,glibc,C,Malloc,C Preprocessor,Glibc,对于glibc,表达式({*(m)=1;0;})是标准C的GCC扩展,称为a。它允许在一个表达式中有多个任意语句 但所有非void表达式都必须生成一个值,而for语句表达式 [t] 复合语句中的最后一件事应该是后跟分号的表达式;此子表达式的值用作整个构造的值 最后一个0仅仅是表达式的结果。可能记录为成功返回0?0是一个没有副作用的语句。它不设置返回值。如果您阅读,您将看到“复合语句中的最后一个内容应该是一个后跟分号的表达式;此子表达式的值充当整个构造的值。”简而言之,它将充当返回值。啊,太好了!

对于glibc,表达式
({*(m)=1;0;})
是标准C的GCC扩展,称为a。它允许在一个表达式中有多个任意语句

但所有非void表达式都必须生成一个值,而for语句表达式

[t] 复合语句中的最后一件事应该是后跟分号的表达式;此子表达式的值用作整个构造的值


最后一个
0
仅仅是表达式的结果。

可能记录为成功返回
0
0是一个没有副作用的语句。它不设置返回值。如果您阅读,您将看到“复合语句中的最后一个内容应该是一个后跟分号的表达式;此子表达式的值充当整个构造的值。”简而言之,它将充当返回值。啊,太好了!我学到了一些新东西。如果
0不存在,返回值应为1。谢谢