Maison >développement back-end >C++ >Pourquoi `printf` fonctionne-t-il sans `std::` en C lorsque `cstdio` est inclus ?
Espace de noms cstdio stdio.h
La référence C pour cstdio indique que "Chaque élément de la bibliothèque est défini dans l'espace de noms std." Cependant, vous avez constaté que std::printf et printf fonctionnent, ce qui soulève la question de savoir si les en-têtes C incluent des symboles dans les deux espaces de noms.
La réponse est plus nuancée.
Y compris cstdio
L'inclusion de cstdio importe des symboles dans l'espace de noms std et éventuellement dans l'espace de noms global. En effet, cstdio inclut stdio.h, qui est un en-tête de style C.
Inclure stdio.h
Inclure stdio.h importe des symboles dans l'espace de noms global et éventuellement dans l'espace de noms std. En effet, stdio.h est un en-tête de style C.
Fonctionnalités de compatibilité
L'utilisation d'en-têtes de style C en C est une fonctionnalité de compatibilité. La norme C 11 précise que pour des raisons de compatibilité avec la bibliothèque standard C, la bibliothèque standard C fournit 25 en-têtes C, dont cstdio et stdio.h.
La norme indique en outre que chaque en-tête C « se comporte comme si chaque nom placé dans l'espace de noms de la bibliothèque standard par l'en-tête cname correspondant est placé dans la portée de l'espace de noms global."
Conclusion
En résumé, lors de l'inclusion des en-têtes de style C en C , les symboles peuvent être importés dans les espaces de noms std et global, en fonction des en-têtes spécifiques utilisés et de l'implémentation du compilateur. Cependant, il n'est pas toujours garanti que les deux espaces de noms contiendront les mêmes symboles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!