2016-08-22 121 views
1

我發現這個代碼的Sparc LLVM後端:這些宏做什麼(LLVM)?

extern "C" void LLVMInitializeSparcTargetInfo() { 
    RegisterTarget<Triple::sparc, /*HasJIT=*/true> X(TheSparcTarget, "sparc", 
                "Sparc"); 
    RegisterTarget<Triple::sparcv9, /*HasJIT=*/true> Y(TheSparcV9Target, 
                "sparcv9", "Sparc V9"); 
    RegisterTarget<Triple::sparcel, /*HasJIT=*/true> Z(TheSparcelTarget, 
                "sparcel", "Sparc LE"); 
} 

我不明白是什麼XYZ宏做,我找不到他們的任何定義或文檔。

+0

它們不是宏,它們是在該函數中聲明的三個對象的名稱。可能它們只是爲了'RegisterTarget'構造函數的一些副作用而被聲明的。你想查找'RegisterTarget'模板類的文檔。 –

+0

@MatteoItalia:這不是一個評論,而是一個已經發布的評論! –

+0

@LightnessRacesinOrbit:我發表該評論(*之前*你的回答),因爲我在公車上,沒有時間深入搜索「RegisterTarget」的實際情況和所做的事情(我通常會這麼做在發佈之前已經做了適當的回答)。 –

回答

5

是什麼讓你覺得這些是宏?

對於我來說,X,YZ看起來像用於實例化註冊對象的一次性名稱。

您應該在尋找RegisterTarget的文檔。