Exercice 53
Énoncé
Quelles erreurs seront détectées par un compilateur C++ dans ce fichier source qui
est accepté par un compilateur C ?
main()
{
int a=10, b=20, c ;
c = g(a, b) ;
printf ("valeur de g(%d,%d) = %d", a, b, c) ;
}
g(int x, int y)
{
return (x*x + 2*x*y + y*y) ;
}
1. La fonction g doit obligatoirement faire l’objet d’une déclaration (sous la forme d’un
prototype) dans la fonction main. Par exemple, on pourrait introduire (n’importe où
avant l’appel de g) :
int g (int, int) ;
ou encore :
int g (int x, int y) ;
Rappelons que, dans ce dernier cas, les noms x et y sont fictifs : ils n’ont aucun rôle
dans la suite et ils n’interfèrent nullement avec d’autres variables de même nom qui
pourraient être déclarées dans la même fonction (ici main).
2. La fonction printf doit, elle aussi, comme toutes les fonctions C++ (le compilateur
n’étant pas en mesure de distinguer les fonctions de la bibliothèque des fonctions
définies par l’utilisateur), faire l’objet d’un prototype. Naturellement, il n’est pas
nécessaire de l’écrire explicitement ; il est obtenu par incorporation du fichier entête correspondant :
#include
Les symboles définis dans ce fichier appartiennent à l’espace de noms std, de sorte
qu’il faut également prévoir une instruction :
using namespace std ;
Notez que certains compilateurs C refusent l’absence de prototype pour une fonction
de la bibliothèque standard telle que printf (mais la norme ANSI n’imposait rien à
117
Précédent

- 118/398

Suivant