我注意到有时候,C宏写得像这样:
#define foo(bar) ({ ++bar; })
Run Code Online (Sandbox Code Playgroud)
经过一些实验,我发现:
({});会编译,但什么都不做.(正如所料.);将导致语法错误.这样做的副作用是确保foo()看起来像代码中的函数.(虽然,如果你关闭分号,错误对诊断问题不是很有用!)return ({}); 抱怨虚假值不被忽略,就像我试图使用void函数一样.这只是为了让开发人员在他们的宏中添加分号,还是有另一个目的?我已经尝试过谷歌,但是标点符号失败了.这有名字吗?