小编Abh*_*ani的帖子

后增量行为

最近,我将我的项目从gcc 4.3升级到gcc 5.5.之后,我看到后增量运算符中的行为更改导致了我的项目中的问题.我使用全局变量作为控制变量.例如,请考虑以下示例程序:

int i = 0;
int main()
{
        int x[10];

        x[i++] = 5; ===> culprit

        return 0;

}
Run Code Online (Sandbox Code Playgroud)

在上面的代码片段中,值i应该仅在5分配之后递增x[0],以保证x[0]i递增之前分配有适当的有效值.

现在问题出现了,我看到在移动到gcc 5.5之后,汇编指令已经改变,并且即使在赋值发生之前,i的值也会增加.以上片段的汇编说明:

Dump of assembler code for function main():
6       {
   0x0000000000400636 <+0>:     push   %rbp
   0x0000000000400637 <+1>:     mov    %rsp,%rbp

7               int x[10];
8
9               x[i++] = 1;
   0x000000000040063a <+4>:     mov    0x200a00(%rip),%eax        # 0x601040 <i>
   0x0000000000400640 <+10>:    lea    0x1(%rax),%edx
   0x0000000000400643 <+13>:    mov    %edx,0x2009f7(%rip)        # 0x601040 <i>  ====> i gets incremented …
Run Code Online (Sandbox Code Playgroud)

c c++ post-increment

4
推荐指数
1
解决办法
239
查看次数

标签 统计

c ×1

c++ ×1

post-increment ×1