C/C++表达式求值顺序的不确定性:自增、自减运算符

目录

C++表达式求值顺序的不确定性

error: multiple unsequenced modifications to [-Werror,-Wunsequenced]

C语言 自增运算符(前++后++)

------------------------------------------------------

// 代码 1

int tmp =0;
tmp =tmp++; // 左、右都含有 “tmp”,出现:警告信息 1。编译通过,但结果错误

  

// 代码 2         

tmp++; // OK

         

// 代码 3

int a, b =0, c =0;
a =b++;   // 左、右的变量不同;OK.
qDebug()<<"a ="<<a;

警告信息 1:

abc.cpp:219:19: warning: multiple unsequenced modifications to 'tmp'

multiple:多重的;复合的;多次

unsequenced:运算顺序是未定的

modifications:改变;修饰子;更改

参考:

C++表达式求值顺序的不确定性_漫游宇宙sky的博客-CSDN博客

https://blog.csdn.net/sky4403/article/details/123010758

error: multiple unsequenced modifications to [-Werror,-Wunsequenced]

https://blog.csdn.net/blueboy12/article/details/120789906

week = ++week%7;

在做蓝桥云实验时看到这样一句话,在加了一些编译选项后会编译失败 error: multiple unsequenced modifications to ‘week’ [-Werror,-Wunsequenced]。然后去看了一下C/C++中关于序列点的内容,总结就是:

不要自增或自减运算符 与赋值运算符等其他运算符 复合使用


————————————————
版权声明:本文为CSDN博主「Grey@」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/blueboy12/article/details/120789906

===============================

C语言 自增运算符(前++后++)

https://blog.csdn.net/nanfeibuyi/article/details/80834983

二、前++后++ 的区别

        无论前++,后++,最后都会自增1,区别在于是先自增,还是先参与运算。(自减与自增类似)。

        前++:先进行++操作。

        后++:后进行操作。

三、自减运算符

        前--:先进行--操作。

        后--:后进行操作。

        

彻底搞懂自增自减运算符 - 知乎

rintf("i的值为%d\n", i++); //在这里,i++为后置++,先使用,后自加。所以i++整体的值为5,故输出为5,然后i再加1,值为6.

=============

自增运算符和数组下标的先后顺序

https://bbs.bccn.net/thread-454977-1-1.html

arr[t++] = 4;
arr[++t] = 4;

这两个语句也是遵循以下原则的:
++x ;自增后使用。
x++ :使用后再自增

可是,这都表明了:自增运算符的优先级大于数组下标[],这合理吗?我见过下面一段话:

后缀运算符,包括数组取下标[]、函数调用()、结构体取成员.、指向结构体的指针取成员->、后缀自增++、后缀自减--。如果一个操作数后面有多个后缀,按照离操作数从近到远的顺序(也就是从左到右)依次运算,比如 a.name++ ,先算 a.name ,再++,这里的 .name 应该看成 a 的一个后缀,而不是把 . 看成双目运算符。


单目运算符,包括前缀自增++、前缀自减--、 sizeof 、类型转换()、取地址运算&、指针间接寻址*、正号+、负号-、按位取反~、逻辑非! 。如果一个操作数前面有多个前缀,按照离操作数从近到远的顺序(也就是从右到左)依次运算,比如 !~a ,先算 ~a ,再求!。

----------------

++x ;自增后使用。
x++ :使用后再自增

不怪你,你被一些似是而非的邪书给害了,跟我念:
  在C中++x这个表达式的值为原先x的值+1,副作用是x的值增加了1;(C++中不是这样定义的,不管它)

  在C中x++这个表达式的值为原先x的值,副作用是x的值增加了1。

即记住几个词 表达式、表达式求值、副作用
抛弃所谓的“先”和“后”,重要的事说两遍:C/C++语言真的没有规定这里有先和后
另外,这两个表达式的值是左值,表达式求值后跟x已经没有关系了。

这都表明了:自增运算符的优先级大于数组下标[]
怎么得出这个逻辑的?这里根本就丝毫不涉及到运算符的优先级。
对于 arr[t++] 这个复合表达式而言,当然要先计算子表达式t++。
即记住几个词 复合表达式、子表达式

我见过下面一段话:……
看的东西还不少,可惜都是童话。
在给你几个词,你自己上网搜一下:C语言运算符优先级与结合方向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值