Un simple bloc note peut suffire, par exemple on peut écrire dans le fichier plop.c :
#include <stdio.h>
int main(){
printf("plop !\n");
return 0;
}
Compiler:
Ici je suis sous linux donc j'appelle directement gcc (-W et -Wall permettent d'afficher plus de messages
pour vérifier si le code est propre, le -o plop.exe permet de dire que l'exécutable à créer doit s'appeler
plop.exe) :
gcc -W -Wall -o plop.exe plop.c
Implicitement le compilateur fait les trois étapes que j'ai décrites juste avant.
1) Précompilation
/* Tout ce qui est défini par <stdio.h>, y compris printf() */
int main(){
printf("plop !\n");
return 0;
}
2) Compilation (il trouve bien le printf car celui-ci est déclaré dans <stdio.h>)
3) Édition de lien (il trouve bien le printf dans le binaire de la lib c). On peut d'ailleurs le vérifier sous linux
avec ldd :
ldd plop.exe
.. qui donne :
linux-gate.so.1 => (0xb7f2b000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dbb000)
/lib/ld-linux.so.2 (0xb7f2c000)
Sur la deuxième ligne on voit bien qu'il utilise la lib c. Puis il crée plop.exe. On vérifie en outre qu'il n'y a ni
erreur, ni warning.
Exécution:
Il ne reste plus qu'à le lancer :
./plop.exe
... ce qui donne comme espéré :
plop !
Si une erreur se produit à ce moment là (erreur de segmentation, pas assez de mémoire etc...) il faut
souvent recourir à un debuggeur (par exemple gdb ou ddd), revoir le code source etc... Dans tous les cas,
ce n'est pas un problème de compilation.
Attention, gros piège sous windows
Pour exécuter un programme sous windows, deux méthodes sont possibles.
Méthode 1 : On peut lancer un programme via les commandes ms-dos (en cliquant sur démarrer exécuter
et en tapant "cmd"). On se place ensuite dans le bon répertoire avec la commande cd et on lance le
programme. Dans ce cas tout se passera bien.
Méthode 2 : Si on lance le programme depuis l'explorateur, windows lance les commandes ms-dos, qui
lance le programme, celui-ci se termine, rend la main aux commandes ms-dos, et windows ferme les
commandes ms-dos. Concrètement on n'a alors rien le temps de voir. Il faut donc mettre une "pause"
juste avant la fin du programme si on veut lancer ton exécutable de cette manière :
#include <stdio.h>Écrire le code source:
int main(){
printf("plop !\n");
getchar(); /*
touche */
return 0;
}
Un simple bloc note peut suffire, par exemple on peut écrire dans le fichier plop.c :
#include <stdio.h>
int main(){
printf("plop !\n");
return 0;
}
Compiler:
Ici je suis sous linux donc j'appelle directement gcc (-W et -Wall permettent d'afficher plus de messages
pour vérifier si le code est propre, le -o plop.exe permet de dire que l'exécutable à créer doit s'appeler
plop.exe) :
gcc -W -Wall -o plop.exe plop.c
Implicitement le compilateur fait les trois étapes que j'ai décrites juste avant.
1) Précompilation
/* Tout ce qui est défini par <stdio.h>, y compris printf() */
int main(){
printf("plop !\n");
return 0;
}
2) Compilation (il trouve bien le printf car celui-ci est déclaré dans <stdio.h>)
3) Édition de lien (il trouve bien le printf dans le binaire de la lib c). On peut d'ailleurs le vérifier sous linux
avec ldd :
ldd plop.exe
.. qui donne :
linux-gate.so.1 => (0xb7f2b000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dbb000)
/lib/ld-linux.so.2 (0xb7f2c000)
Sur la deuxième ligne on voit bien qu'il utilise la lib c. Puis il crée plop.exe. On vérifie en outre qu'il n'y a ni
erreur, ni warning.
Exécution:
Il ne reste plus qu'à le lancer :
./plop.exe
... ce qui donne comme espéré :
plop !
Si une erreur se produit à ce moment là (erreur de segmentation, pas assez de mémoire etc...) il faut
souvent recourir à un debuggeur (par exemple gdb ou ddd), revoir le code source etc... Dans tous les cas,
ce n'est pas un problème de compilation.
Attention, gros piège sous windows
Pour exécuter un programme sous windows, deux méthodes sont possibles.
Méthode 1 : On peut lancer un programme via les commandes ms-dos (en cliquant sur démarrer exécuter
et en tapant "cmd"). On se place ensuite dans le bon répertoire avec la commande cd et on lance le
programme. Dans ce cas tout se passera bien.
Méthode 2 : Si on lance le programme depuis l'explorateur, windows lance les commandes ms-dos, qui
lance le programme, celui-ci se termine, rend la main aux commandes ms-dos, et windows ferme les
commandes ms-dos. Concrètement on n'a alors rien le temps de voir. Il faut donc mettre une "pause"
juste avant la fin du programme si on veut lancer ton exécutable de cette manière :
#include <stdio.h>
int main(){
printf("plop !\n");
getchar(); /*
touche */
return 0;
}
Aucun commentaire: