Introduction au langage C/Premier programme

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
Icon falscher Titel.svg
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.

IntroductionModifier

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 programmeModifier

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).

ExplicationsModifier

CommentairesModifier

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.

IncludeModifier

 #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 mainModifier

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.

FonctionsModifier

  • 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 valeursModifier

 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 fonctionsModifier

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écutableModifier

La chaine de compilationModifier

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 compilateurModifier

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 programmeModifier

  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 programmeModifier

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 loinModifier

Aide sur les commandes et fonctions CModifier

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 importantsModifier

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èquesModifier

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 CModifier

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


Bibliothèques Unix du langage CModifier

Bibliothèques graphiquesModifier

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

Bibliothèques 3dModifier

FrameworkModifier

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).

TPModifier

  Faites les exercices du WikiLivre sur les notions de base.

Voir aussiModifier

  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.