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.