-2

这是一个汇编/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 来跟踪细节。我看到 add 指令被执行c=c+A[i]; 但我看到 '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];

4

1 回答 1

1

这似乎是编译器的优化,因为从未使用过 c 变量并且 c 是静态的,因此最终程序中不存在它。

尝试

返回 c;
你会看到
c= c+A[i];
在 gdb 中

或尝试改变

诠释静态A
诠释一个
它也会起作用

于 2013-08-31T17:39:39.143 回答