在MSVC下使用内联汇编时,允许通过引用C / C ++代码中的标签跳出汇编块之外,如in this MSDN article所述。
在GCC下使用内联汇编时可以这样做吗?
这是我想要完成的一个例子:
__asm__ __volatile__ (
" /* assembly code */ "
" jz external_label; "
);
/* some C code */
external_label:
/* C code coninues... */
然而,编译器抱怨“external_label”没有被定义。
答案 0 :(得分:10)
如果使用汇编程序定义标签怎么办?
asm("external_label:");
更新:此代码似乎有效:
#include <stdio.h>
int
main(void)
{
asm("jmp label");
puts("You should not see this.");
asm("label:");
return 0;
}
答案 1 :(得分:1)
从GCC 4.5开始,您还可以使用asm goto
。以下示例跳转到C标签:
.hello =