Как и многие вещи в c, причина того, что ошибка не генерируется, когда нет прототипа, по историческим причинам.В первые дни люди часто не беспокоились о функциях создания прототипов, потому что указатели и целые числа обычно были одинакового размера, а целочисленные типы, меньшие, чем целое число, переводились в целое число при передаче в качестве параметра (а плавающая точка редко использовалась для системного программирования).
Если бы в какой-то момент они изменили компилятор для выдачи ошибки, если бы функция не была прототипирована, то это сломало бы многие программы и не получило бы широкого распространения.
С 64-битной адресациейСейчас мы входим в период, когда целые числа и указатели имеют разный размер, и программы, скорее всего, прервутся, если вы не создадите прототип функций, таких как malloc (), которые возвращают указатель.
В gcc всегда устанавливайте следующие параметры дляваши собственные программы: -Werror -Wstrict-prototypes