Envoyé par
Obsidian
En regardant bien le code, tu t'aperçois que trois
choses distinguent le second du premier :
- Ajout de #include <stdio.h> ;
- Prototype passé de void main() à int main (void) ;
- Ajout de return 0; en fin de fonction.
C'est le fichier stdio.h qui contient entre autres le prototype de
la fonction printf(), qui dit au compilo comment on utilise la
fonction. En principe, en l'absence d'un tel prototype, gcc devrait
refuser d'aller plus loin en arguant qu'il ne connaît pas cette
fonction. Mais printf() fait partie du standard C depuis la première
heure et, à ce titre, gcc embarque un certain nombre de fonctions
built-in principalement pour des raisons d'optimisation (dixit la
man-page). Or, il se trouve que ta manière (pourtant normale) de
l'utiliser est incompatible avec le prototype prédéfini dans le
compilateur. Mais avec un fichier de déclaration en bonne et due forme,
tout rentre dans l'ordre.