2012-01-05 114 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关键字。