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 suppose.
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.