为什么有两种方法用gcc编写内联汇编?

时间:2011-10-21 17:05:29

标签: gcc

asm volatile(...);

__asm__ __volatile__(...);

我看到两者都被使用了;为什么要创建一些重复的东西?

2 个答案:

答案 0 :(得分:4)

C标准保留'asm'供用户用于任何目的。因此,GCC提供__asm__符号以避免进入用户的名称空间(因为以双下划线开头的标识符是为实现保留的。)

带有双下划线的符号是笨拙的,因此GCC提供了没有双下划线的愉快界面。但是,如果打开符合标准的编译模式(例如-std=c99),则会关闭asm选项。通过使用双下划线表示法编写,它始终可用。

因此,asm阅读起来很愉快,但__asm__符合C标准。

答案 1 :(得分:0)

来自GCC Inline Assembly HOWTO“您可能已经注意到我在这里使用了asm__asm__。两者都有效。如果关键字{{1},我们可以使用__asm__与我们程序中的某些内容发生冲突。“