2012-01-05 80 views
1

可能重複:
Address of register variable註冊變量地址

我知道寄存器變量的地址獲得在C是不允許的。但爲什麼這個代碼是在C++中編譯而不是在c中編譯的。

int main() 
{ 
    register int a; 
    printf("%u\n",&a); 
} 
+0

如果我沒有記錯,MSVC和GCC將允許它。但是Clang會拒絕它。 – Mysticial 2012-01-05 09:24:35

+2

看到這個問題: http://stackoverflow.com/questions/1256246/address-of-register-variable – WeaselFox 2012-01-05 09:25:07

+1

它編譯是因爲你編譯它。我不確定你是什麼意思。你問爲什麼它編譯爲C++沒有錯誤? – jalf 2012-01-05 09:25:13

回答

3

關鍵字register只是提示編譯器。實際上,現在大多數編譯器都會忽略它,因爲它們包含高級代碼以選擇最佳寄存器變量候選。

無論何時您獲取變量的地址,它通常都會放在堆棧上,儘管事實上您已經使用了register關鍵字。