コンパイラ警告 (レベル 1) C5033
'storage-class-keyword' は、サポートされなくなったストレージ クラスです
auto
および register
ストレージ クラスのキーワードは非推奨とされ、C++ 言語から削除されました。
解説
Visual Studio 2010 以降: C++11 では、auto
キーワードは C++ のストレージ クラス指定子ではなくなりました。また、register
キーワードは非推奨とされました。
Visual Studio 2017 バージョン 15.7 以降: (/std:c++17
モード以降で使用可能): register
キーワードは、C++17 以降の標準の C++ 言語から削除されます。
C++ 基準は、auto
キーワードの元の意味と改定された意味を定義します。 C++11 より前のバージョンでは、auto
キーワードは、自動 ストレージ クラスの変数、つまりローカルの有効期間を持つ変数を宣言します。 C++11 以降、 auto
キーワードは、その宣言の初期化式から変数の型を推測し、変数を宣言します。 旧バージョンとの互換性を保つには、/Zc:auto
コンパイラ オプションを使用して auto
キーワードの意味を制御できます。
register
キーワードは、もともと、レジスタに変数を配置するコンパイラへの提案として意図されています。 キーワードは、コンパイラによって日常的に無視されていました。 代わりに、呼び出し規則と最適化レベルを満たすために変数をレジスタに配置するかどうかをコンパイラが制御します。 register
キーワードは、将来使用するために標準で予約されています。
例
// c5033.cpp
// compile by using: cl /c /std:c++17 c5033.cpp
register int value; // warning C5033: 'register' is no longer a supported storage class
この問題を解決するには、register
storage-class 指定子キーワードを削除します。