【问题标题】:unclear c code: double underscore in c macro不清楚的c代码:c宏中的双下划线
【发布时间】:2014-10-30 11:53:49
【问题描述】:

我必须将一些 c 代码解释为一种家庭作业,我不太了解这个宏:

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

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

  • 什么是__asm____volatile__,为什么会有这些下划线?
  • 这两个不同的常数是否用空格隔开?

【问题讨论】:

  • 您是否尝试搜索任何信息?检查this
  • 这是两个不相关的问题。删除第二个。
  • 这不是 C,而是集成汇编程序的扩展。你确定你应该理解你老师给你的例子的这一部分吗?
  • @Deduplicator 修改了问题本身,因为第二部分被删除。

标签: c assembly macros


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2013-02-28
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多