2014-10-30 31 views
-3

我解釋一些C代碼作爲一種功課,我真的不明白這個宏:不清楚的C代碼:在C宏雙下劃線

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

我知道這是某種靜態的功能名爲rdtscll,它接收一個參數val。但其餘的呢?

  • 什麼是__asm____volatile__以及爲什麼這些下劃線?
  • 是由空格分隔的那兩個不同的常量嗎?
+0

您是否嘗試搜索任何信息?檢查[this](http://stackoverflow.com/q/14950614/2173917) – 2014-10-30 11:58:19

+0

這是兩個無關的問題。刪除第二個。 – Deduplicator 2014-10-30 12:04:12

+0

這不是C,而是集成彙編器的擴展。你確定你應該理解你的老師給你的這個例子嗎? – 2014-10-30 12:06:00

回答

2

在這種情況下,__asm____volatile__是用於將彙編語句嵌入到C文件中的編譯器擴展。兩個主要的下劃線是爲了防止在用戶代碼中與標識符衝突,並且尾隨是純粹的選擇。 __volatile__只是一個「反優化」指令。

rdtsc是一個x86指令,用於讀取時間戳計數器,一個基於時鐘週期的非常高速的計數器。 "=A"是GCC內聯彙編語法的一部分 - 有很多參考文獻可以解釋更多關於它的內容。

+0

最後一個有用的回覆,謝謝! – 2014-10-30 14:32:08