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 サイトの他の関連記事を参照してください。