Introduction au langage C/Premier programme

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Premier programme
Icône de la faculté
Chapitre no 2
Leçon : Introduction au langage C
Chap. préc. :Introduction au C
Chap. suiv. :Mots clés
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Introduction au langage C : Premier programme
Introduction au langage C/Premier programme
 », n'a pu être restituée correctement ci-dessus.

Introduction[modifier | modifier le wikicode]

Ce chapitre vous permettra d'obtenir toutes les informations nécessaires et détaillées pour construire un programme simple.

Les programmes que nous allons faire seront pour la plupart des programmes à affichage dans le mode console.

Le programme[modifier | modifier le wikicode]

Coller le code ci-dessous dans un fichier nommé hello.c.

/*
Nom : hello.c
Role : Afficher Bonjour le monde à l'écran.
Paramètres : non pris en compte.
Code retour : 0 (EXIT_SUCCESS)
*/
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
   /* Écrire Bonjour le monde, à l'écran */
   (void)puts("Bonjour le monde");
 
   /* Quitte le programme et 
      retourne la constante EXIT_SUCCESS */
   return EXIT_SUCCESS;
}

Sous Windows ou Unix, lancer la commande de compilation :

gcc hello.c -o hello

Ensuite il suffit d'exécuter le fichier créé par cette opération (hello).

Explications[modifier | modifier le wikicode]

Commentaires[modifier | modifier le wikicode]

Un commentaire en C peut s'écrire de deux manières :

  • de façon classique en C, qui commence avec /* et finit avec */ :
/* le commentaire commence ici
et se termine ici */
/* Un commentaire sur une seule ligne */
  • depuis C99, comme en C++ pour une seule ligne :
// commentaire

Conseils de codage à respecter : c_lis_1, c_lis_2, c_mod_2.

Include[modifier | modifier le wikicode]

 #include <stdio.h>

Lors d'un processus appelé "précompilation", un petit programme que l’on appelle préprocesseur ajoute, supprime et remplace des parties de votre source. Il traite les lignes commençant par le signe #. Cette précompilation fait partie de la chaine de compilation mais ce processus n’est pas lié directement à la compilation elle-même : le préprocesseur ne connait pas le langage C. C'est un programme qui manipule du texte.

L'option -E du compilateur gcc permet de voir à l'écran le résultat de cette phase.

gcc -E hello.c | more

Le code #include <stdio.h> demande au préprocesseur d'inclure le fichier stdio.h, qui contient le prototype (la description) de la fonction puts, utilisée plus tard dans le programme. Ce fichier d'extension .h est situé le plus souvent dans le dossier /usr/include ou dans un fichier de l'arborescence liée au compilateur, que nous aborderons plus tard dans le cours.

Il y a plusieurs manières d’utiliser l'instruction #include.

  • #include < nom_de_fichier > pour aller chercher un fichier dans les fichiers à inclure du compilateur.
  • #include " nom_de_fichier " pour aller chercher un fichier créé par l'utilisateur dans le dossier du programme.

Le code machine de la fonction puts est fourni par une bibliothèque précompilée libC liée au programme lors de la phase d'édition de liens.

Conseil de codage à respecter : c_mod_9.

Fonction principale main[modifier | modifier le wikicode]

Chaque programme possède une fonction main. La fonction main est obligatoire dans tout programme en C standard. C'est le point d'entrée du programme lors de son exécution.

Si l’on ne veut pas récupérer de paramètres de la ligne de commande qui a permis de lancer l'exécutable :

 int main(void)
 {
   return EXIT_SUCCESS;
 }

ou en souhaitant utiliser les paramètres :

 int main(int argc, char *argv[])
 {
   return EXIT_SUCCESS;
 }

L'argument argc donne le nombre d'arguments reçus augmenté de un. L'argument argv donne la liste des arguments passés à l'appel de notre programme. C'est un tableau de chaines de caractères avec argv[0] : le nom du programme, argv[n] : valeur du paramètre numéro n.

Conseil de codage à respecter : c_lis_10.

Fonctions[modifier | modifier le wikicode]

  • Une fonction est une série d'instructions. Une fonction peut être appelée par une autre fonction et doit retourner une valeur sauf si elle est du type void.
  • Elle peut prendre des arguments dont les noms et types sont définis entre les parenthèses. Si la fonction n'attend aucun paramètre, on l'indique par le mot réservé void entre parenthèses.

Conseils de codage à respecter : c_rec_10, c_rob_5.

Retour de valeurs[modifier | modifier le wikicode]

 return EXIT_SUCCESS;

Le return EXIT_SUCCESS est là pour signifier au système d'exploitation que le logiciel a été exécuté sans erreur. EXIT_SUCCESS est une constante qui vaut 0, elle est définie dans stdlib.h.

On peut donc, si une erreur se produit, retourner au système une autre valeur que 0 par return x; où x est une variable qui contiendrait une valeur entière autre que 0. On peut ainsi associer une certaine valeur à un certain type d'erreur. Il est conseillé de n'avoir qu'un seul point de sortie par fonction.

Lorsque la fonction main() aura terminé d'exécuter ses instructions, le programme se terminera.

Conseil de codage à respecter : c_exp_3.

Utilisation de fonctions[modifier | modifier le wikicode]

La bibliothèque standard du langage C fournit les fonctions essentielles d'accès aux entrées et sorties du programme (accès aux fichiers et à l'affichage). Cela peut paraitre peu, mais un programme très complexe peut être entièrement construit à partir de ces fonctions.

Si une fonction retourne une valeur que l’on souhaite stocker dans une variable, la syntaxe suivante est utilisée pour son appel :

 variable = nom_de_la_fonction(argument1, argument2);
Début de l'exemple
Fin de l'exemple


ou si on ne souhaite pas utiliser le code retour de la fonction :

 (void)nom_de_la_fonction(argument1, argument2);
Début de l'exemple
Fin de l'exemple


Exemple de fonction bonjour qui n'accepte pas de paramètre et ne retourne pas de valeur :

 bonjour();
 // C'est une fonction fictive qui afficherait bonjour par exemple.

Le code retour, les paramètres (nombre et types) d'une fonction doivent être conformes à ceux définis dans son prototype sous peine d'erreur ou d'avertissement lors de la compilation. Si le compilateur est ancien ou rendu laxiste, cela pourra conduire à une erreur difficile à trouver lors de l'exécution du programme.

Conseil de codage à respecter : c_rob_3.

Génération d'un exécutable[modifier | modifier le wikicode]

La chaine de compilation[modifier | modifier le wikicode]

Le but est d'obtenir un fichier exécutable que vous pourrez faire marcher sur votre ordinateur. La chaine de compilation permet de passer du code source d'un programme à un binaire exécutable.

On peut distinguer trois phases principales :

  1. Le prétraitement : Traitement par le préprocesseur des fichiers sources .c et .h., le résultat est du fichier texte lisible avec un éditeur.
  2. La compilation du ou des fichiers issus de l'étape précédente. Cette phase complexe produit des fichiers binaires d'extension .o dans lesquels le texte a été transformé en un langage compréhensible par la machine.
  3. L'édition de lien qui rassemble les fichiers précédents et d'autres bibliothèques pour produire un fichier exécutable.

Pour les programmes simples, il est possible de demander au compilateur C d'enchainer les trois phases précédentes et de produire simplement un exécutable compatible avec votre machine.

Disposer d'un compilateur[modifier | modifier le wikicode]

Vous devez disposer d'un compilateur C.

La suite libre GCC de la Free Software Foundation[1] va vous permettre de mettre en pratique ce cours.

Vous trouverez des conseils de mise en œuvre selon votre plateforme informatique sur le wiki Livre Exercices en langage C.

Compiler le premier programme[modifier | modifier le wikicode]

  1. Créez un répertoire de travail.
  2. Copiez le code source du programme bonjour.c dans un éditeur de texte du genre textedit ou notepad, sauvegardez dans un fichier de nom bonjour.c dans le répertoire précédement créé ( Celui même de l'étape n°1 ).
  3. Ouvrez une fenêtre de commande sur le répertoire précédent.
  4. Tapez la commande : gcc -o hello.exe hello.c

Cette commande demande au compilateur gcc :

  • de compiler le fichier source hello.c
  • de nommer le fichier exécutable produit : hello.exe, grâce à l'option -o.

Exécuter le programme[modifier | modifier le wikicode]

Lancer la commande : hello.exe ou ./hello.exe

Vous devriez voir s'afficher :

MacMini-TM:~/Documents/developpement/c thierry$ ./hello.exe
Bonjour le monde
MacMini-TM:~/Documents/developpement/c thierry$

Conseil de codage à respecter : c_rob_1.

Pour aller plus loin[modifier | modifier le wikicode]

Aide sur les commandes et fonctions C[modifier | modifier le wikicode]

Vous pouvez obtenir de l'aide :

  • Sur l’internet;
  • Pour les utilisateur UNIX, Linux et Mac à l'aide de la commande man. Exemple : man -s3 printf

Projets plus importants[modifier | modifier le wikicode]

Vous pouvez :

  • Répartir vos fonctions dans plusieurs fichiers.
  • Automatiser la génération des exécutables à l'aide de l'outil make.
  • Utiliser un environnement de développement intégré (IDE).

Utilisation de bibliothèques[modifier | modifier le wikicode]

Une bibliothèque est un ensemble de fonctions définies par vous ou un autre programmeur, pour être appelées par votre programme. Cela permet la réutilisation briques logicielles qui allègeront vos programmes.

Elles peuvent être fournies sous forme de code source ou de fichiers binaires à lier à vos programmes (exemple d'extension rencontrées : .a .so .dll). Des fichiers ".h" qui contiennent les prototypes et constantes liées aux fonctions de la bibliothèque et seront inclus dans vos fichiers sources.

Bibliothèques de base du langage C[modifier | modifier le wikicode]

Voir le chapitre 10 sur les fonctions de base[2] :


Bibliothèques Unix du langage C[modifier | modifier le wikicode]

Bibliothèques graphiques[modifier | modifier le wikicode]

  • GTK : Gimp ToolKit
  • QT, en C++
  • API Win32, pour la plateforme Windows de Microsoft
  • SDL, Simple DirectMedia Layer

Bibliothèques 3d[modifier | modifier le wikicode]

Framework[modifier | modifier le wikicode]

Certains programmes fournissent même leurs propres bibliothèques pour ajouter des modules et/ou des fonctionnalités à leurs logiciels. On appelle cet ensemble de bibliothèques propres à un environnement de développement intégré (IDE) un Framework (plateforme de travail).

TP[modifier | modifier le wikicode]

Faites les exercices du WikiLivre sur les notions de base.

Voir aussi[modifier | modifier le wikicode]

  1. Le site de la FSF (Free Software Foundation) consacré au projet GCC : [1].
  2. cplusplus.com Site anglais de référence sur les fonctions de base.