Я думаю, что строго ответ: «это зависит от компилятора». Я вполне уверен, что код является допустимым C, поэтому по умолчанию компилятор C не будет / не должен жаловаться, но, возможно, в разных компиляторах есть разные варианты, которые могут его поднять.
Если этот тип проверки ошибок важен для вас, тогда я предлагаю исследовать С-линтеры / средства проверки стиля / инструменты статического анализа, которые улавливают эту и другие распространенные (и не очень) ошибки (если вы их правильно настроили!). Добавление этих инструментов в процесс сборки - это небольшая работа, но если для вашего проекта вы считаете, что перехват такого рода вещей при компиляции является ценным, тогда стоимость того стоит.
Два я бы порекомендовал:
FlexeLint , который является относительно недорогим коммерческим продуктом, который я использовал с большим эффектом.
Альтернативой с открытым исходным кодом будет Splint , но, к сожалению, на данный момент она в основном не поддерживается.
Существуют более дорогие коммерческие инструменты, такие как Klocwork и Coverity.
Добавление таких инструментов в ваше программное обеспечение требует определенных усилий. Они, как правило, чрезвычайно гибкие и настраиваемые, и вам необходимо принять некоторые обоснованные решения о том, какое поведение вы хотите разрешить, а какие - запретить в своей базе кода.