c - 如果条件包含 ++y vs y+=1
问题描述
这是以下代码:
int main () {
int x = 3, y = 0 ;
if(x >= 3 && y+=1){
if(y<=5){
printf("%d\n", ++x);
}
}
else{
printf("%d\n", x++);
}
printf("x=%d, y=%d", x, y++);
return 0;
}
它不起作用,并且y+=1
是它的原因,我认为它的行为方式与我将其替换为++y
(有效)相同。
为什么如果我用 ++y 替换 y+=1 代码可以工作?为什么 y+=1 导致代码失败?
解决方案
问题是运算符优先级。+=
的优先级低于&&
,所以
if (x >= 3 && y += 1)
被解析为
if (((x >= 3) && y) += 1)
这是无效的,因为((x >= 3) && y)
它不是可以递增的左值。
添加括号以覆盖它。
if (x >= 3 && (y+=1)){
推荐阅读
- javascript - 从下拉列表中获取动态调用 api 的数据
- azure - Purview 是否显示 ADF 管道通过数据流自动创建的表的沿袭?
- ruby-on-rails - Rails 管理员:下拉条目太多
- javascript - 使用 Fetch API 时数据流如何工作?
- r - 如何合并每月汇总并在某个日期拆分数据集
- c - 为什么 GCC 不会在长参数上给我 stackerror?
- java - 我如何将纹理添加到 libgdx 中的 textButtons
- php - ErrorException 未定义变量:posts - $posts 未定义
- laravel - 如何在 laravel Blade 中为管理布局构建视图?
- c - C中的位域;字节和位