2017-07-21 9 views
2

以下のコードスニペットでエラーが発生するのはなぜですか?なぜ "register"ストレージクラス指定子はパラメータ宣言内で使用できますか?

int fun(auto int arg) 
{ 
    return 1; 
} 

"auto"の代わりに "register"を使用すると正常に動作します。これの背後に何らかの理由があるのですか、C標準が定義されている方法ですか?

+2

[6.7.6.3p2](http://port70.net/~nsz/c/c11/n1570.html#6.7.6.3p2):パラメータ宣言で発生する唯一のストレージクラス指定子は、register 。 –

+0

おそらくこのリンクは役に立つかもしれません:https://stackoverflow.com/questions/2192547/where-is-the-c-auto-keyword-used –

+2

"auto"と "register"は存在しません。彼らは過去20-30年間は関連性がありませんでした。 – Art

答えて

3

registerを許可することは、コンパイラがレジスタの割り当てを最適化するのに十分なほど洗練されていない時代の歴史的な成果物である可能性が高いです。当時、スタックフレームを介さずに、特定のパラメータをCPUのレジスタの1つに渡す必要があることをコンパイラに伝えることが望ましいことでした。

またはstaticとしてパラメータを渡すことはできませんが、autoは混乱を招く可能性があります。

関連する問題