問題が発生したとき、私はミニGTK + 2.0ゲームをコーディングしていました。私はこれを書くとき:const変数を使用した配列の初期化
const unsigned LABEL_NUMBER = 4;
const char *LABEL_TEXT[4] = {
"Five or More",
"By ... "
"& ...",
"April 2016",
"~~ Thanks for playing ~~"
};
問題はありません。
const unsigned LABEL_NUMBER = 4;
const char *LABEL_TEXT[LABEL_NUMBER] = {
"Five or More",
"By ... "
"& ...",
"April 2016",
"~~ Thanks for playing ~~"
};
gccの答え:私はこの書き込みをする場合でも、
source/gui.c: In function ‘create_about_window’:
source/gui.c:202:4: error: variable-sized object may not be initialized
const char *LABEL_TEXT[LABEL_NUMBER] = {
^
source/gui.c:203:34: error: excess elements in array initializer [-Werror]
"Five or More",
^
source/gui.c:203:34: note: (near initialization for ‘LABEL_TEXT’)
source/gui.c:204:34: error: excess elements in array initializer [-Werror]
"By ... & ..."
^
source/gui.c:204:34: note: (near initialization for ‘LABEL_TEXT’)
source/gui.c:206:34: error: excess elements in array initializer [-Werror]
"April 2016",
^
source/gui.c:206:34: note: (near initialization for ‘LABEL_TEXT’)
source/gui.c:207:34: error: excess elements in array initializer [-Werror]
"~~ Thanks for playing ~~"
^
source/gui.c:207:34: note: (near initialization for ‘LABEL_TEXT’)
をだから私はちょうど私が、配列のサイズを設定するには、一定の符号なし整数を使用しながら、なぜgccのディスプレイにこのエラーを知りたいですか?
[私のマシン上で動作](http://coliru.stacked-crooked.com/a/bb6ad14a4c89e222) –
これはCコンパイラの動作に必要です。 'const unsigned LABEL_NUMBER = 4;'は変数ですが、値を変更しません。配列には2つの味があります。コンパイル時の整数定数(初期化可能)で固定されたサイズのもの、可変サイズ(初期化できないもの)のものです。 Cコンパイラ(C標準)では、後者は変数であるため、可変的に変更された配列を持ち、初期化子は使用できません。疑わしい場合は、 'enum {LABEL_NUMBER = 4};を使用してください。これはシンボルテーブルに表示されますが、配列の次元で使用できます。 –
イニシャライザの2つの最短の文字列に文字列連結を使用することは好奇妙です。 2番目の二重引用符の後にカンマがないので、 "&..."、 "は、単一の文字列です) –