GCC/Clang中这个奇怪的表达是什么?
What is this strange expression in GCC/Clang?
我最近注意到 GCC/Clang 中有一个奇怪的有效 C/C++ 表达式,我以前从未见过。这是 C++ 中的示例,但类似的表达式也适用于 C:
int main(){
int z = 5;
auto x = ({z > 3 ? 3 : 2;}); // <-- expression
std::cout << x;
}
它的作用在某种程度上是显而易见的,但我想知道它叫什么。由于它在 MSVC 中不值得,我猜它是一个非标准扩展。但是有什么东西也适用于 MSVC 吗?特别是 C?
它被称为statement expr,用于GCC。你的表达 ({z > 3 ? 3 : 2;})
可以翻译成
if (z > 3) {x = 3;} else {x = 2;}
来自文档:
A compound statement enclosed in parentheses may appear as an
expression in GNU C. This allows you to use loops, switches, and local
variables within an expression.
换句话说,它提供了将复合语句放在表达式位置的能力。
相关post:
Use of ({ ... }) brackets in macros to swallow the semicolon
它被称为条件运算符。 Return 将取决于条件是真还是假。
但在这种情况下:
自动 x = ({z > 3 ? 3 : 2;}); // <-- 表达式
如果 Z 大于 3 returns 3 否则为 2.
基本语法:Expression1?表达式 2:表达式 3;
我最近注意到 GCC/Clang 中有一个奇怪的有效 C/C++ 表达式,我以前从未见过。这是 C++ 中的示例,但类似的表达式也适用于 C:
int main(){
int z = 5;
auto x = ({z > 3 ? 3 : 2;}); // <-- expression
std::cout << x;
}
它的作用在某种程度上是显而易见的,但我想知道它叫什么。由于它在 MSVC 中不值得,我猜它是一个非标准扩展。但是有什么东西也适用于 MSVC 吗?特别是 C?
它被称为statement expr,用于GCC。你的表达 ({z > 3 ? 3 : 2;})
可以翻译成
if (z > 3) {x = 3;} else {x = 2;}
来自文档:
A compound statement enclosed in parentheses may appear as an expression in GNU C. This allows you to use loops, switches, and local variables within an expression.
换句话说,它提供了将复合语句放在表达式位置的能力。
相关post:
Use of ({ ... }) brackets in macros to swallow the semicolon
它被称为条件运算符。 Return 将取决于条件是真还是假。
但在这种情况下: 自动 x = ({z > 3 ? 3 : 2;}); // <-- 表达式
如果 Z 大于 3 returns 3 否则为 2.
基本语法:Expression1?表达式 2:表达式 3;