asm volatile(...);
__asm__ __volatile__(...);
我看到两者都被使用了;为什么要创建一些重复的东西?
答案 0 :(得分:4)
C标准保留'asm'供用户用于任何目的。因此,GCC提供__asm__
符号以避免进入用户的名称空间(因为以双下划线开头的标识符是为实现保留的。)
带有双下划线的符号是笨拙的,因此GCC提供了没有双下划线的愉快界面。但是,如果打开符合标准的编译模式(例如-std=c99
),则会关闭asm
选项。通过使用双下划线表示法编写,它始终可用。
因此,asm
阅读起来很愉快,但__asm__
符合C标准。
答案 1 :(得分:0)
来自GCC Inline Assembly HOWTO“您可能已经注意到我在这里使用了asm
和__asm__
。两者都有效。如果关键字{{1},我们可以使用__asm__
与我们程序中的某些内容发生冲突。“