allora... pensa ad una cosa. Le librerie che tu richiami nei code che appartengono alla C standard library sono già compilate e sono sotto forma di compilato (file oggetto). Quando fai #include <stdio.h> non fai altro che dire al compilatore: lika al mio programma in file oggetto di stdio.h. Spesso i compilatori, oltre ai vari file oggetti (file oggetto di stdio.h, file oggetto di string.h, file oggetto di stdlib.h, etc.) includono un file oggetto particolare che contiene il compilato delle funzioni più utilizzate (fra cui anche printf() e getc()) e questo file oggetto viene linkato autoamticamente al programma. Ecco perche' quel programma gira senza problemi, comunque sia ti consiglio di utilizzare sempre gli header in modo oculato e corretto.

bye