« Introduction au langage C/Premier programme » : différence entre les versions

Une page de Wikiversité, la communauté pédagogique libre.
Contenu supprimé Contenu ajouté
m Bot : Remplacement de texte automatisé (-\boeuvre(s?|r?)\b +œuvre\1); changement de type cosmétique
Thierry46 (discussion | contributions)
→‎Commentaires : Ref Conseils de codage.
Ligne 45 : Ligne 45 :
* depuis C99, comme en C++ pour une seule ligne :
* depuis C99, comme en C++ pour une seule ligne :
<source lang="c">// commentaire</source>
<source lang="c">// commentaire</source>

Conseils de codage à respecter : [[b:Conseils de codage en C/Lisibilité des sources#Cartouche d'entête (c_lis_1)|c_lis_1]], [[b:Conseils de codage en C/Lisibilité des sources#Indentation des commentaires (c_lis_3)|c_lis_2]], [[b:Conseils de codage en C/Facilité de modification#Écrire des commentaires fonctionnels (c_mod_2)|c_mod_2]].


=== Include ===
=== Include ===

Version du 20 juin 2008 à 19:24

Début de la boite de navigation du chapitre
Premier Programme
Icône de la faculté
Chapitre no {{{numéro}}}
Leçon : 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

Ce chapître 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

hello.c

/*
Nom : hello.c
Role : Afficher Bonjour le monde à l'écran.
Paramètres : non pris en compte.
Code retour : 0 (EXIT_SUCCESS)
Pour produire un exécutable avec le compilateur libre GCC :
   gcc -o hello.exe hello.c
Pour exécuter, tapez : ./hello.exe
*/
#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;
}

Explications

Commentaires

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

  • de façon classique en C :
/* 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

 #include <stdio.h>

Lors d'un processus est 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 chaîne 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 preprocesseur 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.

Fonction principale main

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 permit 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'argument reçus augmenté de un. L'argument argv donne la liste des passé à 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.

Fonctions

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

Retour de valeurs

 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 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; ou x est une variable qui contiendrait une valeur entière autre chose 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.

Utilisation de fonctions

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 paraître 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);

Exemple :

/* Le prototype de la fonction fabs
se trouve dans l'include math.h */
#include <math.h>
 double valeurAbsolue;
 valeurAbsolue = fabs(-2.0);
 /* valeurAbsolue sera donc égal à 2.0 car la fonction fabs()
    renvoie la valeur absolue de la valeur passée en paramètre
    Cette fonction fabs attend un paramètre de type double
    et retourne une valeur de type double. */

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

 (void)nom_de_la_fonction(argument1, argument2);

Exemple :

 (void)puts("Bonjour le monde");

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.

Génération d'un exécutable

La chaîne de compilation

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

On peut distinguer trois phases principales :

  1. Le preprocessing : 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 simple, il est possible de demander au compilateur C d'enchaîner les trois phases précédentes et de produire simplement un exécutable compatible avec votre machine.

Disposer d'un compilateur

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

  1. Créer 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édent.
  3. Ouvrez un 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

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$ 

Pour aller plus loin

Aide sur les commandes et fonctions C

Vous pouvez obtenir de l'aide :

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

Projets plus importants

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

Une bibliothèque (en anglais, library) 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

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

Bibliothèques graphiques

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

Bibliothèques 3d

Framework

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 dedéveloppeent intégré (IDE) un FrameWork (plate forme de travail).

TP

Faîtes les exercices du WikiLivre sur les notions de base.

Voir aussi

  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.