这是一个程序集/ c问题。
我有这个简单的C程序:
main ()
{
register int i = 0;
register int c = 0;
static int A[5]= {1,2,3,4,5};
Loop: c=c+A[i];
i=i+1;
if (i!=5) goto Loop;
}
首先我编译这个程序并使用gdbtui运行调试,然后使用display / I $ pc来跟踪详细信息。我看到为c=c+A[i];
执行了add指令但是我看到i=i+1
执行了'add'指令;
为什么?
---编辑---
澄清:
我按照下面的步骤逐步调试,我的问题是为什么我看到这个i = i + 1;由c = c + A [i];。
执行Breakpoint 1, main() at loop.c:3
register int i = 0;
(gdb) step
i=i+1;
(gdb) step
if (i!=5) goto Loop;
(gdb) step
i=i+1;
(gdb) step
if (i!=5) goto Loop;
我在这里期待的是:
(gdb)步骤
C = C + A [I];
答案 0 :(得分:1)
它似乎是编译器的优化,因为从未使用过c varibale而c是静态的,它在最终程序中不存在。
尝试
return c;,您会在gdb
中看到
c= c+A[i];
或尝试将
int static A更改为
int A,它也会有效