ホームページ >バックエンド開発 >C++ >`int size = 10;` は C の配列サイズ設定に有効な定数式ですか?

`int size = 10;` は C の配列サイズ設定に有効な定数式ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-09 21:15:10499ブラウズ

Is `int size = 10;` a Valid Constant Expression for Array Sizing in C  ?

は "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」は次のようにする必要があります。整数定数式を宣言しました。これは次の方法で実現できます。

  • const の使用: const int size = 10;
  • constexpr の使用: constexpr int size = 10;

結論

GCCまた、Clang による VLA の受け入れは拡張機能であり、C の標準機能ではありません。 Visual Studio の拒否は標準に準拠しています。標準 C で VLA のような機能を使用するには、 const または constexpr を使用して配列サイズを整数定数式にすることをお勧めします。

以上が`int size = 10;` は C の配列サイズ設定に有効な定数式ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。