ホームページ > バックエンド開発 > C++ > C の可変長配列は標準に準拠していますか?

C の可変長配列は標準に準拠していますか?

Susan Sarandon
リリース: 2024-12-12 20:53:12
オリジナル
394 人が閲覧しました

Do Variable-Length Arrays in C   Conform to the Standard?

C の可変長配列 : 定常性と標準準拠の探求

以下の C コード スニペットは、言語に準拠しているかどうかについて疑問を引き起こしています。標準、特に定数式に関して:

int main()
{
  int size = 10;
  int arr[size];
}
ログイン後にコピー

C 標準(8.3.4/1) では、配列のサイズは「整数定数式」でなければなりません。上の例では、サイズにこのプロパティが欠けているようです。

可変長配列 (VLA) とコンパイル ステータス

コードは gcc 4.8 および Clang 3.2 で正常にコンパイルされます。どちらのコンパイラも C の拡張機能として可変長配列 (VLA) をサポートしているためです。ただし、Visual Studio CTP は、サイズがゼロであることを示唆するエラー メッセージを表示してコードを拒否します。この動作は、可変サイズの配列を許可しない C 標準と一致しています。

コンパイラの警告と言語拡張

gcc や Clang などの一部のコンパイラでは、 -pedantic フラグを指定して VLA を使用する場合に警告を表示します。このフラグは、潜在的な非標準機能について警告し、コードが C 標準に違反していることを示します。この場合、配列の定数サイズがないため、VLA の使用は不適切になります。

整数定数式

C ドラフト標準 (5.19 による) .3)、特定の条件を満たす必要があります。この例では、リテラルで初期化されるサイズは、整数定数式として修飾されます。ただし、C 標準に準拠するには、「const」または「constexpr」を使用して明示的に宣言する必要があります。

const int size = 10;
ログイン後にコピー

または

constexpr int size = 10;
ログイン後にコピー

結論

可変長配列は柔軟性を提供しますが、その使用は標準準拠とのバランスをとる必要があります。 Visual Studio などのコンパイラは C 標準に準拠し、そのルールに違反するコードを拒否します。整数定数式の概念を理解し、言語拡張を検討することで、開発者はコードが機能性と標準化要件の両方を確実に満たすことができます。

以上がC の可変長配列は標準に準拠していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート