Я был кодированием мини-GTK + 2.0, когда у меня была проблема. Когда я пишу это:Инициализация массива с константной переменной
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;' - переменная - хотя и не изменяющая значение. Массивы поставляются в двух вариантах; те, размер которых фиксируется постоянной целочисленного значения времени компиляции (который может быть инициализирован), и те, у которых переменный размер (который не может быть инициализирован). Поскольку в терминах C-компилятора (C-стандарт) последний является переменной, у вас есть переменно-модифицированный массив и не может использовать инициализаторы. В случае сомнений используйте 'enum {LABEL_NUMBER = 4};'. Это будет отображаться в вашей таблице символов, но может использоваться в измерениях массива. –
Любопытно использовать конкатенацию строк в двух кратчайших строках в инициализаторах. ('" By ... "" & ... ",' является одной строкой, потому что после второй двойной кавычки нет запятой.) –