这是一个汇编/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指令但我看到‘add’指令被执行为 i=i+1
;
这是为什么?
--- 编辑 ---
澄清一下:
我一步一步调试,如下所示,我的问题是为什么我看到 This i=i+1;由 not 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];
最佳答案
这似乎是编译器的优化,因为从未使用过 c 变量并且 c 是静态的,因此它不存在于最终程序中。
尝试
return c;你会看到
c= c+A[i];在 gdb 中
或尝试更改
int static A至至
int A它也会起作用
关于c - 为什么静态变量不执行 ‘add’指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18549999/