Premier contact avec le C |
||||
Il est maintenant temps d'apprendre à
écrire un programme C. Il est possible que vous ne compreniez pas tout ce que nous ferons.
C'est normal, le but de ce chapitre étant de nous "faire prendre contact".
Ce chapitre et les suivant partent de l'hypothèse que vous avez installé DJGPP correctement (rendez vous pour cela ici). De même pour rédiger un code source, il est neccéssaire d'avoir un éditeur de code source. Pour cela rendez vous ici pour l'éditeur emacs (préférable) ou ici pour l'IDE visual Studio ici. Les utilisateurs de Linux ou d'Unix ou de QNX pourrons directement installer gcc et les biblothèques C à l'aide de l'installeur de leur système. |
||||
Sommaire
1. Hello C
7. Les tokens
|
||||
Hello C | ||||
Ouvrez votre éditeur de texte et saisissez
le programme suivant en respectant la mise en forme et les majuscules :
|
||||
#include <stdio.h> void main() { printf(" Bonjour de la part de C"); } |
||||
|
||||
Sauvegardez ce code source avec le nom bonjour.c
dans un répertoire que nous nommerons intelligemment chapitre1 à l'intérieur
du dossier que vous aurez créé spécialement pour vos sources C. Ouvrez une
fenêtre MSDOS et tapez dans celle-ci :
|
||||
gcc bonjour.c bonjour.exe |
||||
Puis validez par la touche Entrée .
Si vous obtenez une erreur, c'est que le nom du fichier source que vous avez spécifié comporte des fautes ou ne se trouve pas dans le répertoire où vous avez appelé gcc. Cette commande a pour effet d'appeler le compilateur (gcc.exe) et de lui faire compiler notre fichier source. Un fichier bonjour.exe va alors être crée dans le même répertoire. Ce dernier contient le code machine obtenu à partir de notre source. Si nous appelons maintenant notre programme ainsi : |
||||
bonjour |
||||
|
||||
Au bout de une à deux secondes nous
devrions alors avoir la sortie :
|
||||
Bonjour de la part de C |
||||
|
||||
![]() La sortie de notre programme |
||||
Etudions maintenant le code source que nous
venons d'écrire.
|
||||
|
||||
![]() il est important de bien ordonner le répertoire dans lequel on classe tous les programmes C |
||||
Analyse du code | ||||
Le code que nous allons analyser est pratiquement
incompréhensible pour nous à cet instant (bien que nous puissions deviner le
rôle de certains bout de code). Nous allons maintenant tenter d'en expliquer la
signification. Certains éléments, du fait de nos connaissances encore faibles sur
un grand nombre de points, resteront encore obscurs à la fin de ce chapitre
|
||||
Les fonctions | ||||
void main() { printf(" Bonjour de la part de C"); } |
||||
La premières instructions qui se trouvent
dans la partie de code ci-dessus créent une fonction qui se nomme Main.
|
||||
Entête et corps d'une fonction | ||||
Une fonction est un groupe d'instructions
reliées logiquement auquel on attribue un nom.
Les fonctions sont créées en deux étapes. La première étape est l'entête de la fonction, la seconde étape est son contenu (corps). |
||||
![]() déclaration d'une méthode dans un programme C |
||||
Les fonctions prennent généralement
des valeurs qui vont leur permettre d'effectuer un traitement et renvoient une valeur en retour
comme résultat. Les paramètres que prend la fonction main sont placés entre
les parenthèses ouvrantes et fermantes (nous reviendrons sur les paramètres
bientôt). Ici main ne prend donc aucune valeur en entrée. Le mot clé void qui
précède le nom de la fonction indique que celle-ci ne renverra aucune valeur.
Vous devez sans doute avoir au moment de la compilation de votre programme une erreur du type : |
||||
bonjour.c: In function `main': bonjour.c:7: warning: return type of `main' is not `int' |
||||
en effet le compilateur nous indique qu'il est
d'usage de faire renvoyer par la fonction main une valeur. Le code source ci-dessous :
|
||||
#include <stdio.h> int main() { printf(" Bonjour de la part de C"); return 0; } |
||||
ne génère plus de warning à
la compilation car nous indiquons que la fonction main renvoie un entier (mot clé int) et
nous lui faisons retourner la valeur 0 par l'intermédiaire de l'instruction :
|
||||
return 0; |
||||
cette instruction peut encore vous sembler
obscure, ne vous en inquietez pas.
|
||||
La méthode Main | ||||
Un programme peut contenir un nombre
illimité de méthodes. Mais il devra obligatoirement y avoir une méthode dont
le nom sera main. C'est par les instructions que contient cette méthode que
débutera notre programme. Ce dernier a toujours besoin d'un point de départ pour
débuter son traitement.
|
||||
|
||||
Généralement cette fonction
contient les appels à d'autres fonctions du programme qui vnt effectuer un traitement.
Si nous avions créé un fichier source sans la fonction main : |
||||
#include <stdio.h> int fonction() { printf(" Bonjour de la part de C"); return 0; } |
||||
Le compilateur nous aurait renvoyé
l'erreur :
|
||||
![]() sans la fonction main avec laquelle débuter le programme, le compilateur génère une erreur |
||||
Voyons maintenant l'unique instruction de main.
|
||||
printf(" Bonjour de la part de C"); |
||||
Le corps de amin est un appel à une
à une autre fonction à laquelle on donne un paramètre. La fonction
appelée est printf. Cette dernière prend un paramètre de type chaîne
de caractères (ici " Bonjour de la part de C#") et l'affiche sur la sortie standard
(console MSDOS pour Windows, terminal xterm pour Unix et compatible etc.). Cette chaîne de
caractères (placée entre les parenthèses) est différenciée par
le compilateur des autres instructions parce qu'elle est délimitée par des
guillemets.
Le point virgule qui termine l'instruction de notre programme peut être comparée à un sorte de ponctuation. A l'instar du point qui termine les phrases en Français, le point virgule termine les intructions en C. La méthode printf est au départ inconnue du compilateur nous devons donc lui spécifier où elle se trouve définie afin qu'il comprenne son fonctionnement et apprenne à l'utiliser. C'est l'instrution : |
||||
#include <stdio.h> |
||||
Cette ligne fait partie de ce qu'on appelle le
préprocesseur du programme, comme toute directive commençant par le
caractère #.
On inclut ici la bibliothèque stdio.h ( "STanDart Input Ouput" : gestion des sorties vers l'écran et les entrées au clavier). On peut dire qu'il est inséré dans votre code source. Pourquoi inclure un fichier ? Imaginez-vous quelqu'un, qui possède un esprit totalement vierge, incapable de s'exprimer, mais qui sait lire : vous lui donnez alors un livre qui a pour titre " j'apprend à parler ". Lorsque cette personne l'aura lu, elle pourra communiquer avec vous. Ici c'est la même chose : stdio.h est un fichier qui contient différentes définitions qui ont pour but d'apprendre à votre programme des fonctions, directives ou opérateurs, afin que vous puissiez les utiliser dans votre programme sans avoir de messages d'erreur. |
||||
Maintenant que nous comprenons a peu près
correctement notre programme, essayons de le rendre plus lisible.
|
||||
la présentation du code source | ||||
Ecrire un programme lisible et bien
documenté est très important. C'est un élément primordial dans la
recherche de bug. Cela permet en outre d'élaborer des programmes bien conçus et de
donner une chance à d'autres programmeurs de comprendre votre travail.
|
||||
Les tokens | ||||
Lorsqu'on écrit un texte dans une langue,
il faut le faire avec les symboles qui sont admis par cette langue pour la formation de phrases
et de mots. Cette liste de symboles est le jeu de caractères de ce langage. En C le jeu de
caractères suivant est admis :
|
||||
![]() Les différents caractères utilisables dans un code source C |
||||
En assemblant ces caractères d'une
certaine manière, il nous est possible de créer des tokens (éléments
lexicaux de base) qui seront séparés par les caractères d'espacements
(espace, tabulation, retour chariot, ou saut de page).
|
||||
#include <stdio.h> void main() { printf(" Bonjour de la part de C"); } |
||||
dans le programme, main, include, return, sont
des tokens.
|
||||
|
||||
Notre chaîne de caractères "Bonjour
de la part de C'' est un token. Tout comme la ponctuation , soit les points, les points virgules,
mais aussi les parenthèses ou les accolades.
Un token ne peut pas être divisés en plusieurs éléments séparés par des espacements. Notre fonction principale Main ne peut pas s'écrire ainsi : |
||||
m a in |
||||
Par contre il est possible d'espacer à
volonté les tokens :
|
||||
#include <stdio.h> void main() { printf(" Bonjour de la part de C"); } |
||||
ou encore :
|
||||
#include <stdio.h> void main(){ printf(" Bonjour de la part de C");} |
||||
Dans les deux cas ci-dessus le programme
s'avère illisible.
|
||||
les commentaires | ||||
Pour faciliter la compréhension d'un
fichier source lors d'une relecture, le langage C# permet l'utilisation de commentaires. Les
commentaires peuvent êtres insérés en n'importe quel endroit d'un fichier
source où les caractères d'espacement sont autorisés sauf dans les
chaînes de caractères.
C permet deux syntaxes, les commentaires peuvent être introduits par l'utilisation d'un // ou délimités par les symboles /* et */. Lors de la compilation, les commentaires seront évidemment enlevés du fichier exécutable généré. |
||||
commentaires à l'aide de // | ||||
Ces commentaires sont indiqués au C en les
faisant précéder des deux barres obliques //
|
||||
//voilà un commentaire.. |
||||
Le compilateur en lisant le symbole // ignorera
tous les caractères suivants jusqu'à la fin de la ligne. Il est ainsi possible de
faire :
|
||||
#include <stdio.h> //inclusion de stdio |
||||
les commentaires introduits avec l'aide de //
sont donc utilisés pour de brèves explications à l'intérieur d'une
ligne. Ils commencent généralement par un verbe à l'infinitif
|
||||
//afficher le texte printf("atchoum "); |
||||
Si nous voulons mettre des commentaires sur
plusieurs lignes d'affilée, rajouter des // à chaque fois peut s'avérer
être une opération fastidieuse... Il vaut mieux dans ce cas utiliser le second moyen
:
|
||||
commentaires à l'aide de /* et */ | ||||
Il est possible une fois encore d'introduire un
commentaire dans votre source en le délimitant par /* et */. Tous caractères se
trouvant entre ces deux bornes est ignoré par le compilateur.
|
||||
/* voici un commentaire sur plusieurs lignes ... */ /** voici un commentaire */ erroné*/ /*par contre celui là est // autorisé*/ |
||||
Ces commentaires sont généralement
utilisés pour la présentation d'un fichier source ou d'un membre d'une classe.
Voici comment notre programme aurait pu concilier harmonieusement les deux commentaires :
|
||||
//bonjour.c /**************************************************/ /* */ /* premier programme d'apprentissage du C */ /* */ /* Valentin BILLOTTE - " Le langage C " 2001 */ /* */ /**************************************************/ //utiliser stdio #include <stdio.h> /** * foction principale du programme */ void main() { //afficher un message de bienvenue printf(" Bonjour de la part de C"); } //fin bonjour.c |
||||
Dans cette version, notre programme peut
être compris par quelqu'un qui n'a jamais fait du C.
|
||||
|
||||
par Valentin BILLOTTE vbillotte@programmationworld.com http://www.programmationworld.com Dernière mise à jour: |