gpt4 book ai didi

c - 在 c 中使用三元运算符的错误

转载 作者:太空狗 更新时间:2023-10-29 17:18:23 24 4
gpt4 key购买 nike

我有一段 C 代码如下:

main()
{
int a=10, b;
a>=5 ? b=100 : b=200 ;
printf("%d" , b);
}

在 unix 中的 gcc 编译器上运行代码会生成编译时错误,如下所示“需要左值作为赋值的左操作数”并将错误指向 b = 200,而在 Windows 中使用 Turbo C 编译时输出 200。

谁能解释一下这种情况到底发生了什么?

最佳答案

在 C 中,三元运算符定义如下

逻辑或表达式 ?表达式:条件表达式

条件表达式的定义如下

logical-OR-expression

赋值运算符的优先级低于 OR 运算符。因此你必须写

a >= 5 ? b = 100 : ( b = 200 );

否则编译器认为这样的表达式

( a >= 5 ? b = 100 :  b ) = 200;

由于 C 中三元运算符的结果不是左值,因此上述表达式无效,编译器发出错误。

来自 C 标准:

the result is the value of the second or third operand (whichever is evaluated), converted to the type described below

和脚注:

110) A conditional expression does not yield an lvalue.

请注意,C 和 C++ 中的运算符定义之间存在本质区别。在 C++ 中它被定义为

逻辑或表达式?表达式:赋值表达式

在 C++ 中,相同的 GCC 成功编译了代码

#include <iostream>

int main()
{
int a = 10, b;

a >= 5 ? b = 100 : b = 200;

std::cout << "b = " << b << std::endl;

return 0;
}

关于c - 在 c 中使用三元运算符的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26448611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com