我注意到gcc
接受如下代码:
if ( ({ int ret; /* code here */; ret }) == some_value)
...;
for ( i = ({ int ret; /* code here */; ret }); i < top; i++)
...;
等等。
可以创建一个匿名代码块并将其视为右值(只要最后一条语句是变量/值)。
这在某些情况下很有用——我发现的特定用例是以这种方式从内联汇编语句返回值。但也可以使用它来转换函数返回void
但通过指针参数修改内存,例如:
void myfunc(int *arg) { *arg = ...; }
if ( ({int ret; myfunc(&ret); ret; }) == 54321) { ... };
我一直在试图找到文档证明这是 *normal8 / C标准允许这种事情,穷人的 lambda。
谁能提供详细信息?