-3
我解釋一些C代碼作爲一種功課,我真的不明白這個宏:不清楚的C代碼:在C宏雙下劃線
#define rdtscll(val)__asm__ __volatile__("rdtsc":"=A"(val))
我知道這是某種靜態的功能名爲rdtscll
,它接收一個參數val
。但其餘的呢?
- 什麼是
__asm__
和__volatile__
以及爲什麼這些下劃線? - 是由空格分隔的那兩個不同的常量嗎?
我解釋一些C代碼作爲一種功課,我真的不明白這個宏:不清楚的C代碼:在C宏雙下劃線
#define rdtscll(val)__asm__ __volatile__("rdtsc":"=A"(val))
我知道這是某種靜態的功能名爲rdtscll
,它接收一個參數val
。但其餘的呢?
__asm__
和__volatile__
以及爲什麼這些下劃線?在這種情況下,__asm__
和__volatile__
是用於將彙編語句嵌入到C文件中的編譯器擴展。兩個主要的下劃線是爲了防止在用戶代碼中與標識符衝突,並且尾隨是純粹的選擇。 __volatile__
只是一個「反優化」指令。
rdtsc
是一個x86指令,用於讀取時間戳計數器,一個基於時鐘週期的非常高速的計數器。 "=A"
是GCC內聯彙編語法的一部分 - 有很多參考文獻可以解釋更多關於它的內容。
最後一個有用的回覆,謝謝! – 2014-10-30 14:32:08
您是否嘗試搜索任何信息?檢查[this](http://stackoverflow.com/q/14950614/2173917) – 2014-10-30 11:58:19
這是兩個無關的問題。刪除第二個。 – Deduplicator 2014-10-30 12:04:12
這不是C,而是集成彙編器的擴展。你確定你應該理解你的老師給你的這個例子嗎? – 2014-10-30 12:06:00