一个关于内嵌汇编和C符号的问题。
本帖最后由 nadleeh123 于 2012-10-23 20:22:49 编辑 3 int main(int argc, char *argv[])
4 {
5 int i = 1;
6 int ret = 0;
7
8 #if 0
9 test:
10 ret = ret + i;
11 i = i + 1;
12 if(i < 10)
13 goto test;
14 #endif
15 __asm__ __volatile__(
16 "test:\n"
17 "add %0, %0, %1\n"
18 "add %1, %1, #1\n"
19 "cmp %1, #10\n"
20 "blt test\n"
21
22 : "+r" (ret)
23 : "r" (i)
24 : "memory"
25 );
26
27 printf("%d\n", ret);
28
29 return 0;
30 }
代码如上,本来是用于阐述C里面goto 结构和汇编符号跳转指令的实质性的一段代码示例,主要就是第8行那里,如果#if 1
下面__asm__() 中的内容也不屏蔽去编译的话 居然不报任何提示...求大神讲解这种情况编译器如何处理2个相同的符号,#if 0的时候结果是45,#if 1 是55.
[解决办法]
两个test为什么起同一个名字?容易混淆