Dans la programmation C++ ne fonctionne pas l’en-tête . pourquoi ?


Je'suppose que vous vous demandez pourquoi l'utilisation d'une directive #include dans un source C++ en cours de compilation avec un compilateur moderne et conforme à la norme entraîne une erreur.

This happens because, since C++ was first standardized in 1998, the correct directive is

  1. #include  

Now, keep in mind that the first C++ compilers (the venerable cfront) were actually programs that parsed the C++ source code after passing it through the C preprocessor, and then transformed it into C code which was then compiled as a regular C program.

Les fichiers d'en-tête en C (et cela inclut également les en-têtes du système) avaient l'habitude d'être nommés avec un .h (par exemple : stdio.h), il était donc assez évident d'utiliser cela également pour les en-têtes C++. Ainsi, les premiers compilateurs C++ avaient en fait un fichier d'en-tête iostream.h et il suffisait d'inclure en utilisant son nom.

Puis, si je me souviens bien, la première normalisation du C++ en 1998 a dit que les en-têtes C++ standard n'avaient pas de .h dans leur nom. C'était un petit changement qui a néanmoins rompu la rétrocompatibilité au niveau des sources : pour faciliter la transition, les compilateurs et préprocesseurs C++ acceptaient les deux noms (c'est-à-dire à la fois iostream.h et iostream), même si le nom conforme à la norme était iostream. À peu près à cette époque (peut-être plus tôt), nous avions aussi les premiers compilateurs C++ qui n'utilisaient pas le C comme étape intermédiaire, donc nommer les en-têtes du système avec un suffixe .h devenait de plus en plus inutile et confus.

Puis, quelques années plus tard, les compilateurs C++ ont commencé à n'accepter que les noms conformes à la norme, parce que les gens avaient alors largement le temps de corriger leur code C++. Malheureusement, il existe encore des livres de programmation et des exemples de code périmés qui utilisent la syntaxe non standard (ou tout simplement de mauvais livres et exemples).

Les livres de programmation et les exemples de code ne sont pas toujours conformes à la norme.