天天看点

i=1,为什么 (++i)+(++i)=6?

源码

执行

为什么出现这个鬼现象?

原因很简单,c语言的法律里面没有定义这条规格,这个属于c语言的未定义行为,也就是擦边球,什么是擦边球呢?就是这些行为不是错误的行为,法律没有明确定义的,所以就是擦边球。

它的执行顺序是这样的

反汇编看看

我们不用关注所有的代码,分析下面几行关键的

看完这个代码后,应该知道为啥输出的是 6 了吧?

最后

我认为一个是编译器执行顺序的问题,反汇编无非就是搞清楚c的执行顺序,而且我认为研究这个是有意义的,不过有意义不代表可以这样写代码。

c本身是偏底层的东西,了解编译的原理和过程是非常重要的。

但是了解也不能这样瞎用,还是要遵守规则,要不然,这样导致的bug估计要害死很多人。

来自公众号:嵌入式linux

c