[解決済み] C/C++で0サイズの配列を定義するとどうなりますか?
質問
長さ0の配列を定義した場合、実際に何が起こるのでしょうか?
int array[0];
をコードで定義した場合、実際に何が起こるのでしょうか?GCCはまったく文句を言いません。
サンプルプログラム
#include <stdio.h>
int main() {
int arr[0];
return 0;
}
明確化
実は、Darhazerさんのコメントにある可変長のように指摘されるのではなく、このように初期化されたゼロ長の配列は最適化されるのか、されないのかを考えています。
これは、私はいくつかのコードを野に放たなければならないので、私が
SIZE
として定義されている場合
0
と定義されている場合、静的に定義された
int array[SIZE];
実は、GCCが文句を言わないことに驚いていて、それが私の質問につながりました。私が受け取った回答から、警告がないのは、新しい [] 構文で更新されていない古いコードをサポートしていることが主な原因であると思います。
私は主にエラーについて疑問に思っていたので、私は Lundin の回答を正しいものとしてタグ付けしています (Nawaz の回答が最初でしたが、それほど完全ではありませんでした) -- 他の方々は、テールパッド構造の実際の使用について指摘していましたが、関連性はあっても私が求めていたものではありません。
どのように解決するのですか?
配列のサイズを0にすることはできません。
ISO 9899:2011 6.7.6.2です。
式が定数式の場合,0より大きい値を持たなければならない。
上記の文章は、プレーン配列の場合(1項)にも当てはまります。VLA(可変長配列)の場合、式の値が0以下であれば、動作は不定です(第5項)。これはC規格の規範的な文章である。コンパイラがこれと異なる実装をすることは許されません。
gcc -std=c99 -pedantic
はVLAでない場合の警告を出します。
関連
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】C++の余分な資格エラー
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 配列のベクトルを扱う正しい方法