c - 为什么这个C程序不能编译?

标签 c

#include<stdio.h>
int main()
{
int a=10,b;
a>=5?b=100:b=200;
printf("%d",b);
}

错误是什么?

它的工作原理如下:

#include<stdio.h>
int main()
{
int a=10,b;
a>=5?(b=100):(b=200);
printf("%d",b);
}

为什么需要括号?

最佳答案

赋值的优先级最低,你想要做的事情:

a >=5 ? (b=100) : (b=200);
<小时/>

您的原始表达含义如下:

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

在 C 中,三元运算符 ?: 不返回左值,因此它不能将 200 分配给 ?: 的结果。这不是你所期望的。

<小时/>

以这种方式设置运算符优先级,以便表达式:

b = a >= 5 ? 100 : 200;

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

不是

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

关于c - 为什么这个C程序不能编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25339976/

相关文章:

c - 在多个 unsigned char 变量中输入十六进制值

c - 将字符数组的指针发送到C中的函数

c++ - 帮我改进这个 C++ 位缓冲处理代码

c - 在 K&R C 中传递字符串文字

c - 数据类型不匹配和编译器冲突

c - FFMPEG使用sws_scale将YCbCr转换为RGB

c - 使用 time.h 将时间写入 C 中的文件

c - UDP - sendto() 错误 : Address family not supported by protocol

c - Valgrind 使用统一值

c - 查找 `undefined reference` 错误的根本原因