На самом деле, если компилятор не видел объявления для какой-либо функции, которую вы вызываете (не только для malloc), он предположит, что это extern
и вернет int
. Большинство используемых мной компиляторов выдают только предупреждение, а не ошибку, если вы не включите уровень предупреждения.
Это восходит к ранним временам C, я не думаю, что это разрешено в C99.
@ Комментарий Майкла: Вы, кажется, правы, согласно K & R (стр. 72):
Если имя, которое ранее не было объявлено, встречается в выражении и сопровождается левой круглой скобкой, оно объявляется контекстом как имя функции, предполагается, что функция возвращает int, и ничего о ее аргументы.