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