は "int size = 10;" です。定数式?
コード スニペット:
int main() { int size = 10; int arr[size]; }
可変長配列 (VLA) が有効な C 機能であるかどうかについて疑問が生じます。
標準の視点
C 標準(8.3.4/1) では、配列サイズを整数定数式にすることが義務付けられていますが、「サイズ」はそうではないようです。 GCC や Clang などのコンパイラは、C の拡張機能として VLA をサポートしているため、このコードを受け入れます。 Visual Studio は標準に準拠していますが、これを拒否します。
可変長配列
VLA は、動的に決定されるサイズの配列を許可する C99 機能です。 GCC と Clang は、この機能を C に拡張します。ただし、VLA は C 標準の一部ではないため、GCC/Clang で -pedantic フラグを使用すると、警告またはエラーが生成されます。
整数定数式
によるとC ドラフト標準 (5.19/3)、整数定数式は、暗黙的に変換された整数またはスコープ外の列挙型の式です。コア定数式の基準を満たす prvalue に変換します。
「size」を定数式にする
標準に準拠するには、「size」は次のようにする必要があります。整数定数式を宣言しました。これは次の方法で実現できます。
結論
GCCまた、Clang による VLA の受け入れは拡張機能であり、C の標準機能ではありません。 Visual Studio の拒否は標準に準拠しています。標準 C で VLA のような機能を使用するには、 const または constexpr を使用して配列サイズを整数定数式にすることをお勧めします。
以上が`int size = 10;` は C の配列サイズ設定に有効な定数式ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。