La synthèse des section précédentes est contenue dans le fichier salaire.c
, acronyme de salut et de aire, les programmes vus avant :
/* * salut.c - Exemple d'utilisation de bibliotheques personneles. * La bibliotheque utilisee ici est "libmat.h" et les fonctions * appelees sont "moi" et "mathieu". De plus, une fonction est definie * dans ce fichier source ("min"). Enfin, ce fichier source en C * appelle une fonctiondefinie dans un autre fichier source, "cercle.c". * Le tout donne l'executable salaire (SALut+AIRE). * */ #include <stdio.h> #include <string.h> #include <libmat.h> #include <stdlib.h> /* fonction "aire_du_cercle" definie dans un autre fichier source * (ici cercle.c). */ double aire_du_cercle (double r); main (int argc, char **argv) { int i; double rayon, aire; printf ("\n"); if (argc < 2) { printf ("Syntaxe incorrecte, essayez %s -h pour avoir l'aide\n", argv[0]); printf ("\n"); printf ("*********************************\n"); printf ("Usage : %s rayon\n", argv[0]); printf ("**********************************\n"); exit (1); } printf ("*********************************************\n"); printf ("bonjour à celui qui lira ça\n"); printf ("**********************************************\n"); /* Appel des fonctions definies a la fin de "salut.c" */ printf ("min 3, 5 : %d\n", min (3, 5)); printf ("min 8, 5 : %d\n", min (8, 5)); /* Appel des fonctions definies dans "libmat.h" */ moi (1, 1); mathieu (22); /* Appel de la fonction definie dans le fichier "cercle.c" */ rayon = atof (argv[1]); aire = aire_du_cercle (rayon); printf ("Aire du cercle de rayon %f = %f\n", rayon, aire); /* Traitement des arguments passes au programme. */ for (i = 0; i < argc; i++) printf ("argc %d argv[%d] %s \n", argc, i, argv[i]); for (i = 0; i < argc; i++) { if ((strcmp ("-h", argv[i]) == 0) || (strcmp ("--help", argv[i]) == 0)) { printf ("aide demandee...\n"); printf (" -h, --help affiche l'aide\n"); printf (" -t affiche un message\n"); } if ((strcmp ("-t", argv[i]) == 0)) { printf ("Message...\n"); } } printf ("\n"); /* for i */ } /* Definition d'une fonction juste pour tester */ int min (int a, int b) { if (a < b) return a; else return b; }
Pour compiler un tel programme, il faut entrer les commandes suivantes :
gcc -c -I ../include salaire.c gcc -c cercle.c gcc -L ../lib salaire.o cercle.o -o salaire -lmat
C'est un peu compliqué, et surtout long à taper, d'autant qu'on peut compiler des fichiers qui n'ont pas été modifiés (si seul le fichier cercle.c
est modifié, ce n'est pas la peine de re-compiler le fichier salaire.c
). Les makefiles vont nous aider pour nous simplifier la vie.