Le C est, comme chacun sait, un langage de très bas niveau en ce qui concerne les HLL. Le C++, bien qu'il puisse sembler être un langage de niveau considérablement plus élevé que le C, partage encore un certain nombre de ses caractéristiques. Et l'une de ces caractéristiques est que les langages ont été conçus par des programmeurs, pour des programmeurs -- et, plus précisément, des programmeurs qui savaient ce qu'ils faisaient.
(Pour le reste de cette réponse, je vais me concentrer sur le C. La plupart de ce que je vais dire s'applique également au C++, mais peut-être pas aussi fortement. Bien que, comme l'a dit Bjarne Stroustrup, "Le C permet de se tirer facilement une balle dans le pied ; le C++ rend les choses plus difficiles, mais quand on y arrive, ça fait sauter toute la jambe." ]
Si tu sais ce que tu fais vraiment savoir ce que vous faites - il faut parfois "enfreindre les règles". Mais la plupart du temps, nous sommes d'accord pour dire que des règles bien intentionnées nous évitent à tous des ennuis, et qu'enfreindre délibérément ces règles en permanence est une mauvaise idée.
Mais en C et C++, il y a un nombre étonnamment élevé de choses que vous pouvez faire qui sont des "mauvaises idées" mais qui ne sont pas formellement "contre les règles". Parfois, il s'agit d'une mauvaise idée à certains moments (mais qui peut être défendable à d'autres moments) ; parfois, il s'agit d'une mauvaise idée pratiquement tout le temps. Mais la tradition a toujours été la suivante no pour avertir de ces choses - parce que, encore une fois, l'hypothèse est que les programmeurs savent ce qu'ils font, ils ne feraient pas ces choses sans une bonne raison, ils seraient ennuyés par un tas d'avertissements inutiles.
Mais bien sûr, tous les programmeurs ne vraiment savent ce qu'ils font. Et, en particulier, chaque programmeur C (quelle que soit son expérience) passe par une phase de programmeur C débutant. Et même les programmeurs C expérimentés peuvent être négligents et faire des erreurs.
Enfin, l'expérience a montré non seulement que les programmeurs font des erreurs, mais que ces erreurs peuvent avoir des conséquences réelles et graves. Si vous faites une erreur, que le compilateur ne vous en avertit pas et que, pour une raison ou pour une autre, le programme ne plante pas immédiatement ou ne fait pas quelque chose de manifestement mauvais à cause de cette erreur, celle-ci peut rester cachée, parfois pendant des années, jusqu'à ce qu'elle provoque une catastrophe. vraiment gros problème.
Il s'avère donc que, la plupart du temps, les avertissements sont une bonne idée, après tout. Même les programmeurs expérimentés ont appris (en fait, c'est " notamment les programmeurs expérimentés ont appris") que, dans l'ensemble, les avertissements ont tendance à faire plus de bien que de mal. Pour chaque fois que vous avez fait quelque chose de mal délibérément et que l'avertissement a été une nuisance, il y a probablement au moins dix fois où vous avez fait quelque chose de mal par accident et où l'avertissement vous a évité des problèmes supplémentaires. Et la plupart des avertissements peuvent être désactivés ou contournés pour les quelques fois où vous voulez vraiment faire la "mauvaise" chose.
(Un exemple classique d'une telle "erreur" est le test if(a = b)
. La plupart du temps, il s'agit d'une erreur, et la plupart des compilateurs actuels en tiennent compte, certains même par défaut. Mais si vous vraiment voulait à la fois attribuer b
a a
et tester le résultat, vous pouvez désactiver l'avertissement en tapant if((a = b))
.)
La deuxième question est la suivante : pourquoi voulez-vous demander au compilateur de traiter les avertissements comme des erreurs ? Je dirais que c'est à cause de la nature humaine, plus précisément, la réaction trop facile de dire "Oh, c'est juste un avertissement, ce n'est pas si important, je nettoierai ça plus tard". Mais si vous êtes un procrastinateur (et je ne sais pas pour vous, mais moi je suis une terrible ), il est facile de repousser le nettoyage pour toujours, et si vous prenez l'habitude d'ignorer les avertissements, il devient de plus en plus facile de manquer un nettoyage. important un message d'avertissement qui reste là, inaperçu, au milieu de tous ceux que vous ignorez.
Demander au compilateur de traiter les avertissements comme des erreurs est donc une petite astuce que vous pouvez utiliser pour contourner cette faiblesse humaine.
Personnellement, je n'insiste pas autant pour traiter les avertissements comme des erreurs. (En fait, si je suis honnête, je peux dire que je n'active pratiquement jamais cette option dans ma programmation "personnelle"). Mais vous pouvez être sûr que j'ai activé cette option au travail, où notre guide de style (que j'ai écrit) rend son utilisation obligatoire. Et je dirais - je pense que la plupart des programmeurs professionnels diraient - que tout magasin qui ne traite pas les avertissements comme des erreurs en C se comporte de manière irresponsable, n'adhère pas aux meilleures pratiques de l'industrie communément acceptées.