使用代码块作为rvalues - 在if()内,for(),while()?

时间:2014-04-02 11:29:02

标签: c gcc c99 c11 gcc-extensions

我注意到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

任何人都可以提供详情吗?

0 个答案:

没有答案