J'ai vu des informations sur les différences entre des choses comme iostream
vs iostream.h
. D'après ce que j'ai compris de ceux-ci, la différence entre eux est que la version sans .h
l'extension ne remplira pas l'espace de noms tandis que la version avec l'extension le sera.
Est-ce la même chose pour cmath
vs math.h
? Pourquoi cmath
(et de nombreux autres fichiers similaires) est-il préfixé avec un c
au lieu d'être simplement math
? Y a-t-il plus de différences entre eux?
J'ai vu des informations sur les différences entre des choses comme iostream vs iostream.h.
[iostream.h] n'est pas un en-tête standard.
ce n'est pas un exemple de la question que vous soulevez.
[cmath] définit des symboles dans l'espace de noms std
et peut également définir des symboles dans l'espace de noms global. [math.h] définit des symboles dans l'espace de noms global et peut également définir des symboles dans l'espace de noms std
. si vous incluez le premier et utilisez un symbole non qualifié, il peut être compilé avec un compilateur mais pas avec un autre. c'est donc une bonne idée d'utiliser [math.h]. et en général, pour ces paires d'en-têtes, utiliser la version [.h].
c ++ 98 a fourni une garantie formelle que l'en-tête c xxx
ne pollue pas l'espace de noms global. c'est peut-être pour cela qu'ils ont été définis. cependant, c'était un peu plus difficile à mettre en œuvre que les polluants, donc en pratique aucune implémentation de bibliothèque standard que je connaisse n'a suivi la norme à cet égard, et donc elle a finalement été modifiée pour refléter la réalité en c ++ 11.
Cela serait peut-être utile:
La bibliothèque C++ comprend les mêmes définitions que la bibliothèque de langage C organisée dans la même structure de fichiers d'en-tête, avec les différences suivantes:
1 - Chaque fichier d'en-tête porte le même nom que la version en langage C mais avec un préfixe "c" et sans extension. Par exemple, l'équivalent C++ pour le fichier d'en-tête du langage C <stdlib.h> est <cstdlib>.
2 - Chaque élément de la bibliothèque est défini dans l'espace de noms std.
Les en-têtes dont les noms commencent par c
sont dérivés des en-têtes de la bibliothèque standard C. Les en-têtes correspondants avec le préfixe c
supprimé et un .h
le suffixe ajouté est identique (ou presque identique) aux en-têtes de bibliothèque C standard.
<cmath>
définit les symboles appropriés sous l'espace de noms std
; <math.h>
les définit globalement.
(Je viens d'apprendre que ce n'est pas aussi simple que ça; voir la réponse d'Alf.)