1. Structure générale d'un programme
La transformation d'un texte écrit en langage C en un programme exécutable par l'ordinateur se fait en deux étapes : la compilation et l'édition de liens. La compilation est la traduction des fonctions écrites en C en des procédures équivalentes écrites dans un langage dont la machine peut exécuter les instructions. Le compilateur lit toujours un fichier, appelé fichier source, et produit un fichier, dit fichier objet.
Chaque fichier objet est incomplet, insuffisant pour être exécuté, car il contient des appels de fonctions ou des références à des variables qui ne sont pas définies dans le même fichier. Par exemple, le premier programme que vous écrirez contiendra déjà la fonction printf que vous n'aurez certainement pas écrite vous-même. L'édition de liens est l'opération par laquelle plusieurs fichiers objets sont mis ensemble pour se compléter mutuellement : un fichier apporte des définitions de fonctions et de variables auxquelles un autre fichier fait référence et réciproquement. L'éditeur de liens (ou linker ) prend en entrée plusieurs fichiers objets et bibliothèques (une variété particulière de fichiers objets) et produit un unique fichier exécutable. L'éditeur de liens est largement indépendant du langage de programmation utilisé pour écrire les fichiers sources, qui peuvent même avoir été écrits dans des langages différents.
Chaque fichier source entrant dans la composition d'un programme exécutable est fait d'une succession d'un nombre quelconque d'éléments indépendants, qui sont :
- des directives pour le préprocesseur (lignes commençant par #),
- des constructions de types (struct, union, enum, typedef),
- des déclarations de variables et de fonctions externes,
- des définitions de variables et
- des définitions de fonctions.
Seules les expressions des deux dernières catégories font grossir le fichier objet : les définitions de fonctions laissent leur traduction en langage machine, tandis que les définitions de variables se traduisent par des réservations d'espace, éventuellement garni de valeurs initiales. Les autres directives et déclarations s'adressent au compilateur et il n'en reste pas de trace lorsque la compilation est finie.
En C on n'a donc pas une structure syntaxique englobant tout, comme la construction « Program ... end. » du langage Pascal ; un programme n'est qu'une collection de fonctions assortie d'un ensemble de variables globales. D'où la question : par ou l'exécution doit-elle commencer ? La règle généralement suivie par l'éditeur de liens est la suivante : parmi les fonctions données il doit en exister une dont le nom est main. C'est par elle que l'exécution commencera ; le lancement du programme équivaut à l'appel de cette fonction par le système d'exploitation. Notez bien que, à part cela, main est une fonction comme les autres, sans aucune autre propriété spécifique ; en particulier, les variables internes à main sont locales, tout comme celles des autres fonctions.
2. Un minimum de code
Pour n'importe quel programme, il faudra taper un minimum de code. Ce code ne fera rien de particulier mais il est indispensable.
C'est ce « code minimum » que nous allons découvrir maintenant. Il devrait servir de base pour la plupart de vos programmes en langage C.
Sous Code::Blocks, en allant dans le menu File / New / Project, puis en choisissant Console Application et en sélectionnant le langage C, voici le code minimal généré par Code::Blocks :
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
Notez qu'il y a une ligne vide à la fin de ce code. Il est nécessaire de taper sur la touche « Entrée » après la dernière accolade. Chaque fichier en C devrait normalement se terminer par une ligne vide. Si vous ne le faites pas, ce n'est pas grave, mais le compilateur risque de vous afficher un avertissement (warning).
Notez que la ligne :
int main()
… peut aussi s'écrire :
int main(int argc, char *argv[])
Les deux écritures sont possibles, mais la seconde (la compliquée) est la plus courante.
2.1. Analysons le code minimal
a) Commençons par les deux premières lignes qui se ressemblent beaucoup :
#include <stdio.h> #include <stdlib.h>
Ce sont des lignes spéciales que l'on ne voit qu'en haut des fichiers source. Ces lignes sont facilement reconnaissables car elles commencent par un dièse #. Ces lignes spéciales, on les appelle directives de préprocesseur. Ce sont des lignes qui seront lues par un programme appelé préprocesseur, un programme qui se lance au début de la compilation.
Le mot include en anglais signifie « inclure » en français. Ces lignes demandent d'inclure des fichiers au projet, c'est-à-dire d'ajouter des fichiers pour la compilation.
Il y a deux lignes, donc deux fichiers inclus. Ces fichiers s'appellent stdio.h et stdlib.h. Ces fichiers existent déjà, des fichiers source tout prêts. On les appelle des bibliothèques (certains parlent aussi de librairies).
Bref, en résumé les deux premières lignes incluent les bibliothèques qui vont nous permettre (entre autres) d'afficher du texte à l'écran assez « facilement ».
b) Passons à la suite :
int main()
{
printf("Hello world!\n");
return 0;
}
Ce que vous voyez là, c'est ce qu'on appelle une fonction. Un programme en langage C est constitué de fonctions, il ne contient quasiment que ça. Pour le moment, notre programme ne contient donc qu'une seule fonction.
Une fonction permet de rassembler plusieurs commandes à l'ordinateur. Regroupées dans une fonction, les commandes permettent de faire quelque chose de précis. Par exemple, on peut créer une fonction ouvrir_fichier qui contiendra une suite d'instructions pour l'ordinateur lui expliquant comment ouvrir un fichier.
L'avantage, c'est qu'une fois la fonction écrite, vous n'aurez plus qu'à dire ouvrir_fichier, et votre ordinateur saura comment faire sans que vous ayez à tout répéter !
Sans rentrer, pour le moment, dans les détails de la construction d'une fonction, analysons quand même ses grandes parties.
La première ligne contient le nom de la fonction: main, c'est le deuxième mot. C'est un nom de fonction particulier qui signifie « principal ». main est la fonction principale de votre programme, c'est toujours par la fonction main que le programme commence.
Une fonction a un début et une fin, délimités par des accolades { et }. Toute la fonction main se trouve donc entre ces accolades.
Notre fonction main contient deux lignes :
printf("Hello world!\n");
return 0;
Ces lignes à l'intérieur d'une fonction ont un nom. On les appelle instructions.
Chaque instruction est une commande à l'ordinateur. Chacune de ces lignes demande à l'ordinateur de faire quelque chose de précis.
Un programme, ce n'est au bout du compte rien d'autre qu'une série d'instructions : « fais ceci », « fais cela ». Vous donnez des ordres à votre ordinateur et il les exécute. Du moins si vous l'avez bien dressé.
Très important : toute instruction se termine obligatoirement par un point-virgule «;». C'est d'ailleurs comme ça qu'on reconnaît ce qui est une instruction et ce qui n'en est pas une. Si vous oubliez de mettre un point-virgule à la fin d'une instruction, votre programme ne compilera pas !
La première ligne :printf("Hello world!\n"); demande à afficher le message « Hello world! » à l'écran. Quand votre programme arrivera à cette ligne, il va donc afficher un message à l'écran, puis passer à l'instruction suivante.
Passons à l'instruction suivante :
return 0;
Cette ligne indique qu'on arrive à la fin de notre fonction main et demande de renvoyer la valeur 0.
Voici un schéma qui récapitule le vocabulaire qu'on vient d'apprendre (fig. suivante).

c) Testons notre programme
Pour tester le programme, on doit compiler le projet, puis l'exécuter (cliquez sur l'icône Build & Run sous Code::Blocks).
Si vous ne l'avez pas encore fait, on vous demandera d'enregistrer les fichiers. Faites-le.
Si la compilation ne fonctionne pas et que vous avez une erreur de ce type :"My-program - Release" uses an invalid compiler. Skipping... Nothing to be done... Cela signifie que vous avez téléchargé la version de Code::Blocks sans mingw (le compilateur). Retournez sur le site de Code::Blocks pour télécharger la version avec mingw.
Après un temps d'attente, voici ce qui devrait s'afficher (fig. suivante).

Le programme affiche « Hello world! » (sur la première ligne).
Les lignes en dessous ont été générées par Code::Blocks et indiquent que le programme s'est bien exécuté et combien de temps s'est écoulé depuis le lancement.
On vous invite à appuyer sur n'importe quelle touche du clavier pour fermer la fenêtre. Votre programme s'arrête alors.
À partir de maintenant, on sait écrire un message sur l'écran. Pour le faire il suffit juste de remplacer, dans la ligne qui fait appel à printf, le texte se trouvant entre griffe " " par le texte que nous voulons afficher.
En fait, printf est une instruction. Elle commande à l'ordinateur : « Affiche-moi ce message à l'écran ».
Il faut savoir que printf est en fait une fonction qui a déjà été écrite par d'autres programmeurs avant nous.
Les fichiers stdio.h et stdlib.h contiennent la plupart des fonctions de base dont on a besoin dans un programme.stdio.h en particulier contient des fonctions permettant d'afficher des choses à l'écran (comme printf) mais aussi de demander à l'utilisateur de taper quelque chose (ce sont des fonctions que l'on verra plus tard).
Une des solutions pour rendre notre programme plus présentable serait de faire un retour à la ligne après « Bonjour » (comme si on appuyait sur la touche « Entrée »). Pour cela, il va falloir utiliser ce qu'on appelle des caractères spéciaux…
3. Les caractères spéciaux
Les caractères spéciaux sont des lettres spéciales qui permettent d'indiquer qu'on veut aller à la ligne, faire une tabulation, etc.
Ils sont faciles à reconnaître : c'est un ensemble de deux caractères. Le premier d'entre eux est toujours un anti-slash ( \ ), et le second un nombre ou une lettre. Voici deux caractères spéciaux courants que vous aurez probablement besoin d'utiliser, ainsi que leur signification :
-
\n: retour à la ligne (= « Entrée ») ; -
\t: tabulation.
Dans notre cas, pour faire une entrée, il suffit de taper\n pour créer un retour à la ligne.
Si je veux donc faire un retour à la ligne juste après le mot « Bonjour », je devrais taper :
printf("Bonjour\n");
Vous pouvez écrire à la suite du\n sans aucun problème. Tout ce que vous écrirez à la suite du\n sera placé sur la ligne suivante. Vous pourriez donc vous entraîner à écrire :
printf("Bonjour\nAu Revoir\n");\\
Cela affichera « Bonjour » sur la première ligne et « Au revoir » sur la ligne suivante.
Remarque:
La console de Windows ne gère pas les accents.
4. Les commentaires
Quel que soit le langage de programmation, on a la possibilité d'ajouter des commentaires à son code. Le langage C n'échappe pas à la règle.
Ajouter un commentaire, c'est taper du texte au milieu de votre programme pour indiquer ce qu'il fait, à quoi sert telle ligne de code, etc. C'est vraiment quelque chose d'indispensable car, même en étant un génie de la programmation, on a besoin de faire quelques annotations par-ci par-là. Cela permet :
-
de vous retrouver au milieu d'un de vos codes source plus tard. Le plus souvent, on oublie vite comment fonctionnent les programmes qu'on a écrits. Si vous faites une pause ne serait-ce que quelques jours, vous aurez besoin de vous aider de vos propres commentaires pour vous retrouver dans un gros code ;
-
si vous donnez votre projet à quelqu'un d'autre (qui ne connaît a priori pas votre code source), cela lui permettra de se familiariser avec bien plus rapidement.
Il y a plusieurs manières d'insérer un commentaire. Tout dépend de la longueur du commentaire que vous voulez écrire.
-
Votre commentaire est court : il tient sur une seule ligne, il ne fait que quelques mots. Dans ce cas, vous devez taper un double slash (
//) suivi de votre commentaire. Par exemple :// Ceci est un commentaireVous pouvez aussi bien écrire un commentaire seul sur sa ligne, ou bien à droite d'une instruction. C'est d'ailleurs quelque chose de très pratique car ainsi, on sait que le commentaire sert à indiquer à quoi sert la ligne sur laquelle il est. Exemple :
printf("Bonjour\n");// Cette instruction affiche Bonjour à l'écran -
Votre commentaire est long : vous avez besoin d'écrire plusieurs phrases qui tiennent sur plusieurs lignes. Dans ce cas, vous devez taper un code qui signifie « début de commentaire » et un autre code qui signifie « fin de commentaire » :
-
pour indiquer le début du commentaire : tapez un slash suivi d'une étoile (
/*) ; -
pour indiquer la fin du commentaire : tapez une étoile suivie d'un slash (
*/).
Vous écrirez donc par exemple :
/* Ceci estun commentairesur plusieurs lignes */ -
Reprenons notre code source qui écrit « Bonjour », et ajoutons-lui quelques commentaires juste pour s'entraîner :
/*Ci-dessous, ce sont des directives de préprocesseur.Ces lignes permettent d'ajouter des fichiers au projet,fichiers que l'on appelle bibliothèques.Grâce à ces bibliothèques, on disposera de fonctions toutes prêtes pour afficherpar exemple un message à l'écran.*/#include <stdio.h> #include <stdlib.h>/*Ci-dessous, vous avez la fonction principale du programme, appelée main.C'est par cette fonction que tous les programmes commencent.Ici, ma fonction se contente d'afficher Bonjour à l'écran.*/int main(){printf("Bonjour"); // Cette instruction affiche Bonjour à l'écranreturn 0; // Le programme renvoie le nombre 0 puis s'arrête}
Voilà ce que donnerait notre programme avec quelques commentaires. Il a l'air d'être plus gros, mais en fait c'est le même que tout à l'heure. Lors de la compilation, tous les commentaires seront ignorés. Ces commentaires n'apparaîtront pas dans le programme final, ils servent seulement aux programmeurs.
Retenez donc : les commentaires doivent guider le programmeur dans son code source, lui permettre de se repérer. Essayez de commenter un ensemble de lignes plutôt que toutes les lignes une par une.
Et pour finir sur une petite touche culturelle, voici une citation tirée de chez IBM :
Citation
Si après avoir lu uniquement les commentaires d'un programme vous n'en comprenez pas le fonctionnement, jetez le tout !
2016-10-13 05:16:54 / mazoughou@magoe.gn
0 commentaires
Votre impression compte aussi