Previous Next Up Index Contents

Exercice 10.1

a) Etablir la hiérarchie des appels pour les trois fonctions:

b) Définir les fonctions d'après les trois méthodes décrites ci-dessus en ajoutant les déclarations manquantes.

suite . . .

- Déclarations locales des fonctions et définition 'top-down':

 #include <stdio.h>

 main()
 {
  /* Déclaration locale de SURFACE */
  double SURFACE(double RAYON);
   double R;
  printf("Introduire le rayon du cercle : ");
  scanf("%lf", &R);
  printf("La surface du cercle est %f. \n", SURFACE(R));
  return 0;
 }

 double SURFACE(double RAYON)
 {
  /* Déclaration locale de PI */
  double PI(void);
   return PI()*RAYON*RAYON;
 }

 double PI(void)
 {
  return 3.14159265;
 }

- Définition 'bottom-up' sans déclarations:

 #include <stdio.h>

 double PI(void)
 {
  return 3.14159265;
 }

 double SURFACE(double RAYON)
 {
  return PI()*RAYON*RAYON;
 }

 main()
 {
  double R;
  printf("Introduire le rayon du cercle : ");
  scanf("%lf", &R);
  printf("La surface du cercle est %f. \n", SURFACE(R));
  return 0;
 }

- Déclaration globale des fonctions et définition 'top-down':

 #include <stdio.h>
 /* Déclaration globale des fonctions */
 double SURFACE(double RAYON);
 double PI(void);
 
 main()
 {
  double R;
  printf("Introduire le rayon du cercle : ");
  scanf("%lf", &R);
  printf("La surface du cercle est %f. \n", SURFACE(R));
  return 0;
 }

 double SURFACE(double RAYON)
 {
  return PI()*RAYON*RAYON;
 }

 double PI(void)
 {
  return 3.14159265;
 }

c)

Si nous compilons le programme donné sans changements, nous obtenons les messages suivants:

  Warning ... : Call to function 'SURFACE' with no prototype
  Error   ... : Type mismatch in redeclaration of 'SURFACE'

Explications:

Le premier message est un avertissement qui nous informe que la fonction SURFACE est appelée sans être déclarée auparavant. Le compilateur suppose alors par défaut que la fonction fournit un résultat du type int et que les paramètres ont le type des arguments utilisés lors de l'appel. Cet avertissement restera sans conséquences si ces suppositions sont correctes.

En rencontrant ensuite la définition de la fonction, le compilateur détecte une incompatibilité de type, car la fonction SURFACE retourne en réalité une valeur du type double. Cette incompatibilité de type ("Type mismatch") est signalée par un message d'erreur et le programme ne peut pas être compilé avec succès.


Previous Next Up Index Contents

Feedback - Copyright © 1993,1996,1997 F.Faber