Au cours précédent, nous avons installé le compilateur GCC et créé l’exemple le plus simple « hello world ». Dans cette leçon, nous allons détailler cet exemple ligne par ligne. Voici d’abord le code :
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
Langage du code : Arduino (arduino)
Le code est très simple : il affiche une seule ligne de texte.
Nous analysons ensuite chaque ligne du code, du haut vers le bas.
1. #include <stdio.h>
Nous avons brièvement évoqué le pré-traitement au cours précédent ; cette première ligne est une instruction de pré-traitement. Comment le reconnaître ? Grâce au symbole #.
# : marqueur d’instruction de pré-traitement, transmis au préprocesseur et exécuté à la première étape de la compilation.
include : mot-clé pour importer un fichier d’en-tête ; son rôle est de copier l’intégralité du code du fichier spécifié dans le programme courant.
<stdio.h> : fichier d’en-tête standard d’entrée-sortie (standard input output). Il contient des fonctions pour afficher du texte à l’écran ou lire des entrées clavier. La fonction printf utilisée ci-dessous est définie dans ce fichier.
Strictement parlant, le pré-traitement ne fait pas partie de la syntaxe du langage C. Le pré-traitement du C n’est pas une composante de la syntaxe centrale du langage C : c’est une étape indépendante exécutée par le compilateur avant la compilation proprement dite. Il fait partie du processus de compilation global, mais pas du système syntaxique et sémantique natif du C.
Concrètement, un programme de pré-traitement distinct réalise des remplacements textuels. Ici, #include <stdio.h> remplace cette ligne par tout le contenu du fichier stdio.h. Supposons que stdio.h ne contienne que le texte AAAAAAAAA.
Avant que le compilateur ne traite le code, celui-ci deviendra donc ceci :
AAAAAAAAA
int main()
{
printf("hello, world\n");
return 0;
}
Langage du code : Arduino (arduino)
Bien sûr, ce n’est qu’une hypothèse : le vrai contenu du fichier d’en-tête est beaucoup plus complexe. Les curieux peuvent ouvrir le fichier pour l’examiner.
Ce fichier d’en-tête est stocké sur votre ordinateur, le chemin varie selon le système d’exploitation :
Systèmes Linux/Unix : généralement dans /usr/include/stdio.h
Windows (Visual Studio) : dans VC/include/stdio.h
macOS (Xcode) : dans /Applications/Xcode.app/.../usr/include/stdio.h
Vous pouvez utiliser un outil de recherche pour localiser ce fichier sur votre machine.
Vous avez maintenant une compréhension basique du précompilation, n’est-ce pas ?
Si vous supprimez la ligne #include <stdio.h>, le compilateur ne reconnaîtra pas printf et affichera une erreur. Essayez de supprimer cette ligne et de lancer la compilation avec gcc pour constater le résultat.

La compilation affichera alors un message d’erreur

2. int main()
main = fonction de point d’entrée du programme C
- Lors de l’exécution de n’importe quel programme C, le système d’exploitation commence automatiquement par la fonction
main. Un programme ne peut comporter qu’une seule fonction main. int: type de valeur renvoyée par la fonction, abréviation de integer (entier).(): marque une fonction ; on peut écrire des paramètres entre parenthèses, des parenthèses vides signifient qu’il n’y a aucun paramètre.
Cette syntaxe main a été reprise par la plupart des langages de programmation ultérieurs : c’est le seul point de lancement du programme. Lorsque vous double-cliquez sur un fichier exe ou lancez une commande dans le terminal (ex: hello), le système d’exploitation appelle automatiquement cette fonction main.
L’int au début indique le type de retour de la fonction. Plus tard, quand nous définirons nos propres fonctions, nous devrons systématiquement préciser ce type, nous le verrons dans les cours suivants.
Les parenthèses () servent à déclarer les paramètres acceptés par la fonction ; ici elles sont vides, donc la fonction ne reçoit aucun paramètre. On peut aussi écrire une version avec paramètres comme ceci :
int main(int argc, char *argv[])Langage du code : CSS (css)
Cet écrit accepte deux paramètres : un entier et un tableau de chaînes de caractères, nous détaillerons cela dans les prochaines leçons.
Les paramètres de main sont transmis par le système d’exploitation. D’où viennent ces valeurs ?
Vous avez probablement utilisé des outils en ligne de commande comme la commande ping. Par exemple, ping 12.36.4.xxx teste une connexion réseau : ping correspond au programme ping.exe, et l’adresse IP 12.36.4.xxx est un paramètre transmis à la fonction main de ping.exe.
De la même manière, si vous exécutez hello abc dans le terminal, abc est transmis comme paramètre au programme. Les variables entre parenthèses de main récupèrent ces valeurs saisies par l’utilisateur et transmises par le système d’exploitation.
Retenez simplement ceci pour l’instant : main est l’unique point d’entrée du programme, une seule instance autorisée, appelée par le système d’exploitation qui lui transmet les arguments de la ligne de commande.
3. { } accolades
Délimitent le corps de la fonction : { marque le début du code de la fonction, } sa fin. Tout le code de la fonction s’écrit entre les deux accolades.
4. printf("hello, world\n");
printf: abréviation de print format, fonction d’affichage formaté qui imprime du texte sur la console.- Guillemets doubles
" ": encadrent une chaîne de caractères constante, le texte à afficher est écrit à l’intérieur. \n: caractère d’échappement, saut de ligne : après affichage du texte, le curseur passe à la ligne suivante.;: marqueur de fin d’instruction en C. Chaque instruction exécutable doit se terminer par un point-virgule, son absence provoque une erreur de compilation.
Le « f » à la fin du nom de fonction signifie format (formatage), nous approfondirons ce point plus tard. Retenez juste que cette ligne affiche le texte hello, world\n dans la console, et que \n ajoute un saut de ligne automatique après le message.
5. return 0;
return: renvoie un entier à la fonctionmainet interrompt l’exécution de cette fonction. Pourquoi utiliser return ? Parce que nous avons indiqué int comme type de retour de main, il faut donc renvoyer un entier dans le corps de la fonction.0: convention standard qui signifie que le programme s’est terminé normalement sans erreur ; cela informe le système d’exploitation du statut d’exécution.- retourner
0= exécution réussie du programme - retourner un nombre différent de 0 (ex:
return 1;) = arrêt anormal du programme avec erreur
- retourner
Les normes C modernes autorisent d’omettre
return 0;à la fin de main, le compilateur le complète automatiquement. Cependant, il est recommandé aux débutants de l’écrire explicitement pour respecter les conventions.