Les fonctions dans le style K&R

La définition des fonctions est la plus importante différence entre ANSI et K&R. Dans la version K&R du langage, le prototype (c'est à dire la liste-de-déclarations-de-paramètres) est remplacé par une liste d'identificateurs, qui sont les noms des paramètres. La déclaration des types des paramètres se fait juste après, de la manière suivante :
int sum_square(i,j) /*   liste des noms des paramètres formels */
int i, int j;       /*   déclaration du type des paramètres    */
{
    int resultat;
    
    resultat = i*i + j*j;
    return resultat;
}

En ce qui concerne la déclaration de fonction externe, il faut préfixer avec le mot-clé extern, l'en-tête de la fonction débarrassée de la liste des noms des paramètres, comme ceci :

extern int sum_square();

Dans ce cas, le compilateur ne connaît pas le type des paramètres de la fonction, il lui est donc impossible de détecter une erreur portant sur le type des paramètres lors d'un appel de fonction externe. Cette situation est assez catastrophique et c'est la raison pour laquelle le comité de normalisation a introduit le concept de prototype de fonction vu au chapitre [*]. Il n'a cependant pas voulu faire un changement incompatible, il a donc décidé que les deux méthodes étaient acceptées, en précisant toutefois que la méthode K&R était une caractéristique obsolescente. En clair, cela signifie que cette méthode pourrait être abandonnée dans une prochaine révision de la norme, même si ça n'a pas été le cas pour C99 et C11.



Sous-sections
Matthieu Moy 2017-02-08