История изменений
Исправление firkax, (текущая версия) :
Просто gcc весьма пермиссивен.
Нет, это не пермиссивность, это специально заложенная фича. Её совершенно невозможно было бы сделать, просто скипнув какую-нить проверку. Удивление вызвано тем, что обычно такие штуки только в -std=gnuXX включаются а не в -std=cXX и тем что flexible arrays вообще (даже не статические) появились весьма позже чем c89.
Как поведут себя всякие санитайзеры и оптимизаторы не понятно
Всмысле «как поведут»? gcc сделал бинарник, инструментов которые что-то в нём после компиляции уже оптимизируют (кроме strip) я не видел, по крайней мере в хоть сколько-то широком использовании. А те, что в ходе компиляции - они часть gcc и разумеется они знают про эту штуку и никак ей не повредят.
Ну а сторонний статический анализатор наверно будет ругаться на инициализацию данных за пределами размера массива.
Размер типа не соответствует размеру твоих данных.
Прямо как в x = malloc(sizeof(*x)+datalen); которое штатное для flexible arrays.
Исходная версия firkax, :
Просто gcc весьма пермиссивен.
Нет, это не пермиссивность, это специально заложенная фича. Её совершенно невозможно было бы сделать, просто скипнув какую-нить проверку. Удивление вызвано тем, что обычно такие штуки только в -std=gnuXX включаются а не в -std=cXX.
Как поведут себя всякие санитайзеры и оптимизаторы не понятно
Всмысле «как поведут»? gcc сделал бинарник, инструментов которые что-то в нём после компиляции уже оптимизируют (кроме strip) я не видел, по крайней мере в хоть сколько-то широком использовании. А те, что в ходе компиляции - они часть gcc и разумеется они знают про эту штуку и никак ей не повредят.
Ну а сторонний статический анализатор наверно будет ругаться на инициализацию данных за пределами размера массива.
Размер типа не соответствует размеру твоих данных.
Прямо как в x = malloc(sizeof(*x)+datalen); которое штатное для flexible arrays.