Игнорирование файла stdio.h в файле ac

Возможный дубликат:
Почему #include is * not * требуется использовать printf ()?

Я столкнулся с проблемой в приведенном ниже коде.

int main() { printf("\nHello Stack Overflow\n\n") ; return 0 ; } 

В вышеупомянутом коде я оставил, включая «#include». И если я компилирую и выполняю этот кусок кода, вывод печатается, как ожидалось. Но «#include» является самым важным в программе на C, я проигнорировал его, и все же компиляция выполняется без ошибок, но с предупреждением.

Почему это происходит?

В C функции, которые не объявлены, неявно рассматриваются как возвращающие int и принимающие int аргументы.

Это плохая практика и укусит вас. Например, если вы хотите печатать данные не того же размера int, как double или float .

От человека gcc

  -nostdlib Do not use the standard system startup files or libraries when linking. No startup files and only the libraries you specify will be passed to the linker. The compiler may generate calls to "memcmp", "memset", "memcpy" and "memmove". These entries are usually resolved by entries in libc. These entry points should be supplied through some other mechanism when this option is specified. 

Во время компиляции символ printf неизвестен, но libc в связанном имплиците в двоичный файл … и вот как это работает.