Что я знаю о компиляторах C/С++, так это то, что они игнорируют внутренние фигурные скобки при инициализации многомерных массивов.
Итак, вы не можете этого сделать:
int myArray[][] = { { 2, 3 }, { 4, 5 }, { 4, 1 } };
потому что компилятор увидит его точно как
int myArray[][] = { 2, 3, 4, 5, 4, 1 };
и теперь он не знает, есть ли это 6 * 1, 3 * 2, 2 * 3, 1 * 6 или даже что-то еще (так как это может быть частичный список инициализации, необязательно полный).
Мой вопрос: почему это работает во многих компиляторах?
int myArray[][2] = { { 2 }, { 4, 5 }, { 4, 1 } };
Компилятор "интуитивно" видит это как:
int myArray[][2] = { { 2, 0 }, { 4, 5 }, { 4, 1 } };
что означает, что он не игнорирует фигурные скобки. Я пробовал это на трех разных компиляторах до сих пор, и все работало.
Я ожидаю, что ответ будет "это просто зависит от компилятора". У меня нет доступа к стандарту, поэтому, пожалуйста, предоставьте ответ со стандарта. Мне не нужны чувства кишки, у меня есть мои.