为什么以下代码片段会产生错误?
int fun(auto int arg)
{
return 1;
}
如果我使用“register”代替“auto”,它可以正常工作。这背后有什么理由,还是仅仅是C标准的定义方式?
答案 0 :(得分:3)
允许register
可能是编译器不够复杂以优化寄存器分配或者比人类更好的时代的历史工件。那时候需要告诉编译器应该在CPU的一个寄存器中传递一个特定的参数,而不是通过堆栈帧。
此处没有其他存储类说明符可能有意义:您不能将参数传递为extern
或static
,而auto
会造成混淆。