Ответ 1
Определения функций в непротопической форме являются допустимыми C89, C99 и C11.
Он называется определением функции старого стиля, но эта функция отмечена как C89 как устаревшая функция.
Эта форма должна быть не, используемой в новых программах.
C99 Обоснование гласит:
"Характеристика старого стиля как устаревшего означает обескураживать его использования и в качестве сильного одобрения со стороны Комитета новый стиль".
даже K & R2 препятствует его использованию:
"Старый стиль декларации и определения по-прежнему работает с ANSI C, по крайней мере, в течение переходного периода, но мы настоятельно рекомендуем вам использовать новую форму, когда у вас есть компилятор, который ее поддерживает".
Теперь ваша функция также не имеет типа возврата и опускает тип возвращаемого значения в объявлении функции или в определении функции больше не действует с C99. До C99 функции без возвращаемого типа неявно возвращают int
.
Что касается вопроса gcc
, по умолчанию gcc
компилируется с -std=gnu89
. Это означает расширение C89 Standard + gcc. Поэтому по умолчанию gcc
будет принимать компиляцию программы с объявлением функций и определением в их старомодной форме и без возвращаемого типа.