TL; DR - Вы исключаете файл заголовка, а не стандартную библиотеку.
Если исключить файл заголовка, в котором функция оказывает опережающее объявление, вы получите предупреждение наверняка упоминая «неявное объявление» функции.
В этом случае (недействительным в соответствии с последними стандартами) предполагается, что функция вернет int
, и никакая проверка количества переданных параметров будет отсутствовать.
Однако по умолчанию созданный объектный файл из вашего источника связан с библиотекой C по умолчанию libc
, которая имеет определение функции. В этом случае возвращаемый тип функции соответствует неявным случаем, поэтому компоновщик счастливо связывает объектные файлы вместе.
Таким образом, он успешно заканчивает соединение, и работает так же.
Это должно быть int main(void)
, по крайней мере, соответствовать стандартам.
Вы видите предупреждение? –
В журнале построения нет предупреждений. – mssirvi
Затем вы должны использовать все флаги компилятора для включения предупреждений ... –