相关疑难解决方法(0)

范围可以用括号括起来并在C中返回一个值吗?

我查看了MINMac OS X 上的定义,发现了这个:

#define MIN(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })
Run Code Online (Sandbox Code Playgroud)

起初并不是那么明显,但是当它扩展时,它会变成对我来说非常奇怪的东西:

int a = 1, b = 2;
// int min = MIN(a, b);
int min = ({
    int __a = (a);
    int __b = (b);
    __a < __b ? __a : __b;
});
Run Code Online (Sandbox Code Playgroud)

实际上,这是一个包含在表达式中的范围,该表达式"返回"最后一个表达式的值.它似乎工作,至少与clang,在范围内几乎任意的代码:

int a = ({
    time_t x = time(NULL);
    if (x % 3 == 1)
        x++;

    x % 10;
});
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这个,我想知道它是不是标准.我知道Visual …

c

9
推荐指数
1
解决办法
348
查看次数

标签 统计

c ×1