next up previous contents
Next: Erreurs à l'exécution Up: Messages du compilateur Previous: Divers

Les avertissements (Warnings)

Un programmeur averti en vaut deux. Dicton populaire

Ils sont supposés vous avertir d'utilisations peu recommandées (car potentiellement dangereuses) du langage, ou de possibles ambiguïtés, ou encore de situations "étranges" (parties de codes non atteignables, valeur affectée à une variable et non utilisée par la suite, etc.) pouvant résulter d'une erreur de programmation.

Voici un exemple où un avertissement, bien interprété, permet de découvrir une erreur qui aurait pu passer inaperçue dans un gros programme :

    if (max = 2)
    {
      ...

L'avertissement concerne la première ligne du fragment ci-dessus, et dit :

CC: "ex3.cpp", line 7: warning: constant assignment in condition (114)
ce que l'on peut traduire par assignation à une valeur constante dans une condition.

Dans l'immense majorité des cas, une condition est en effet réalisée grâce à un opérateur relationnel tel que ==, <, >=, etc. Le compilateur signale donc à juste titre que l'assignation, étrange dans ce contexte, est probablement une erreur de frappe ou d'inattention, le == étant probablement devenu = par inadvertance.

Voici un autre exemple où se glisse subrepticement une erreur sémantique :

const double g = 9.81;
void main()
{
  double m, p;
  m = p / g;
  /* suite du programme ... */
}

Dans ce second exemple le compilateur émettra le message :

CC: "ex4.cpp", line 5: warning:  p used but not set (116)
ce qui signifie ... mais vous avez compris, je supposegif.

Le programmeur doit alors se demander : quelle valeur peut bien contenir la variable p, qui est correctement déclarée mais à laquelle je n'ai jamais affecté de valeur ? La réponse est : n'importe quelle valeur. Le comportement du programme ne peut donc, dans ce cas, être prédit. Ce n'est peut-être qu'une faute de frappe ou d'étourderie, mais ce genre d'erreur, dans d'autres contextes, peut coûter très cher.



Michel COUPRIE
Thu Sep 12 13:39:33 METDST 1996