我查了定义MIN
在 Mac OS X 上,发现了这个:
#define MIN(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })
一开始并不那么明显,但是当它扩展时,它就变成了对我来说非常奇怪的东西:
int a = 1, b = 2;
// int min = MIN(a, b);
int min = ({
int __a = (a);
int __b = (b);
__a < __b ? __a : __b;
});
这实际上是一个包装在表达式中的作用域,它“返回”最后一个表达式的值。它似乎可以工作,至少对于 clang 来说是这样,在作用域内有几乎任意的代码:
int a = ({
time_t x = time(NULL);
if (x % 3 == 1)
x++;
x % 10;
});
我以前从未见过这个,我想知道这是否是标准的。我知道 Visual Studio 不会接受它,但话又说回来,Visual Studio 仍然使用 C89,所以这不是很说明问题。
这是 GCC 对标准 C 的扩展,称为语句表达式 http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html。是的,如果您只需要支持 GNU 编译器(并且它是跨平台的),您可以使用它。如果您需要遵循标准 C,则不会使用该表示法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)