Почему-то компилируется. Помогите!

ну и поскольку меня не поправили, думаю я это понял правильно, а то еще не был уверен)))

Сходу так не назову главы. Но по фразам “анонимный массив” и “coumound literals” можно что-то найти

у нас возможен вот такой массив (int [ ] ) { инициализаторы }

инициализаторы возможны designated:

[10] = 11

Но возможны и такие:

[10] function_returning_int()

Инициализируются элементы массива по-порядку, а не в том порядке, что написал программист - из-за этого выполняется именно 10, 20, 30

if () ; - пустышка. Внутри пустышки условие - инициализатор массива

В Си много старого синтаксиса, который вполне себе валиден, но им никто не пользуется.

Например, с точки зрения языка Си массив - это указатель. Элемент массива, скажем, M[10], это просто значение памяти по адресу M+10

ГЦЦ просто складывает то, что снаружи квадратных скобок и то, что внутри.

Поэтому, например, вместо M[10] вполне себе можно написать 10[M] и это скомпилируется и будет работать :). Но так никто не пишет.

Совмещаем с анонимными массивами (строка == массив == указатель, Сишная святая троица):

"hello"[1] == ‘e‘

1["hello"] == ‘e’

Кто Вам сказал? Ещё как пишут и мы здесь, на форуме, это уже обсуждали.

Ого. Я такой код только в обфускаторах видел :)))

Бейсиком попутал, родной Си не узнал))

если это байтовый массив, то да. Иначе 10 еще придётся на sizeof умножать

Зачем? Если M - указатель, то операция “+” сама всё что надо умножит – это ж адресная арифметика!

Вот темнота

точно. нисабразил.

Зато рефлекс правильный появился на sizeof(), это хорошо.