Неверная инициализация многомерного массива C/C++ в GCCC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неверная инициализация многомерного массива C/C++ в GCC

Сообщение Anonymous »

Думаю, я понимаю, как заполнение работает в правильном формате, то есть в следующем:
char arr[3][2] = {{1}, {4,5}};
эквивалент
char arr[3][2] = {1, 0, 4, 5, 0, 0};
И, ради интереса, я решил бросить неверные форматы в GCC, чтобы посмотреть, что он вернет. Для следующего кода: char arr[3][3] = {{1,2,3},12,{4,5,6}}; GCC возвращает:
{1, 2, 3, 12, 4, 0, 0, 0, 0}
но я предполагал, что оно вернется:
{1, 2, 3, 12, 4, 5, 6, 0, 0}
Похоже, что 12 выводит его из строя, вызывая предупреждения о «лишних элементах в скалярном инициализаторе» для {4,5,6 , и, следовательно, 5 и 6 отбрасываются.
Какой алгоритм используется для выравнивания (из-за отсутствия лучшего термина) этих инициализации многомерных массивов?
Вот что говорит GCC:
test.c: In function 'main':
test.c:119:2: warning: braces around scalar initializer
char arr[3][3] = {{1,2,3},12,{4,5,6}};
^~~~
test.c:119:2: note: (near initialization for 'arr[1][1]')
test.c:119:36: warning: excess elements in scalar initializer
char arr[3][3] = {{1,2,3},12,{4,5,6}};
^
test.c:119:36: note: (near initialization for 'arr[1][1]')
test.c:119:38: warning: excess elements in scalar initializer
char arr[3][3] = {{1,2,3},12,{4,5,6}};
^
test.c:119:38: note: (near initialization for 'arr[1][1]')


Подробнее здесь: https://stackoverflow.com/questions/631 ... ion-in-gcc
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»