【发布时间】:2020-11-25 17:37:42
【问题描述】:
一些使用 goto 限定符的扩展汇编语句无法使用 GCC 10.1.0 进行编译。具体来说,
int foo(int count)
{
asm goto ("dec %0; jb %l[stop]"
: "+r" (count)
:
:
: stop);
return count;
stop:
return 0;
}
(这是 GCC 扩展 asm 文档中的一个示例)无法编译并显示消息 expected ‘:’ before string constant。删除 "+r" (count) 和 dec %0 可以使其编译成功,但无论我在与 goto 标签相同的 asm 语句中提供输出操作数时尝试什么,都会以同样的方式出错。
【问题讨论】:
-
dec不修改 CF;jb正在读取您没有告诉编译器的输入。这看起来像是一个损坏的示例,GCC 文档应该在它适用的 GCC 版本实际发布之前修复。
标签: c gcc inline-assembly goto