不清楚的c代码:c宏中的双下划线

时间:2014-10-30 11:53:50

标签: c assembly macros

我必须将一些c代码解释为一种功课,我不太了解这个宏:

#define rdtscll(val)__asm__ __volatile__("rdtsc":"=A"(val))

我知道它是某种名为rdtscll的静态函数,它接收一个参数val。但其余的呢?

  • 什么是__asm____volatile__以及这些下划线的原因?
  • 是用空格分隔的那两个不同的常数吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下,__asm____volatile__是用于将汇编语句嵌入C文件的编译器扩展。两个主要下划线是为了防止用户代码中的标识符冲突,并且尾随是纯粹的选择。 __volatile__只是一个“反优化”指令。

rdtsc是用于读取时间戳计数器的x86指令,这是一个基于时钟周期的超高速计数器。 "=A"是GCC内联汇编语法的一部分 - 有很多参考资料解释了它的更多信息。