2

我最近注意到GCC/Clang中有一个奇怪的有效C/C++表达式,这是我以前从未见过的。这是C++中的示例,但类似的表达式也适用于C

int main(){
    int z = 5;
    auto x = ({z > 3 ? 3 : 2;}); // <-- expression
    std::cout << x;
}

它的作用是显而易见的,但我想知道它叫什么。由于它在MSVC中不值得,我猜它是一个非标准扩展。但是有什么东西也适用于MSVC吗?特别是在C中?

4

2 回答 2

4

它被称为语句 expr,在 GCC 中使用。你的表达({z > 3 ? 3 : 2;})可以翻译成

if (z > 3) {x = 3;} else {x = 2;}

从文档:

括在括号中的复合语句在 GNU C 中可能显示为表达式。这允许您在表达式中使用循环、开关和局部变量。

换句话说,它提供了将复合语句置于表达式位置的能力。

相关帖子:

于 2021-06-07T14:57:04.330 回答
0

它被称为条件运算符。返回将取决于条件是真还是假。

但在这种情况下: auto x = ({z > 3 ? 3 : 2;}); // <-- 表达式

如果 Z 大于 3,则返回 3,否则返回 2。

基本语法:Expression1? 表达式2:表达式3;

于 2021-06-07T16:55:31.820 回答