当前位置: 代码迷 >> 汇编语言 >> 一个关于内嵌汇编和C符号的有关问题
  详细解决方案

一个关于内嵌汇编和C符号的有关问题

热度:2366   发布时间:2013-02-26 00:00:00.0
一个关于内嵌汇编和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为什么起同一个名字?容易混淆
  相关解决方案