Using C Headers in C++: Namespaces or Global Scope?
In C++, one can access C functions and headers by modifying the header file names (e.g., stdio.h to cstdio, stdlib.h to cstdlib). However, it raises the question of whether to use functions from the std:: namespace or the global namespace for these headers in C++ code.
Namespace vs. Global Scope in C++
According to the C++11 Standard, every C header with a ".h" extension behaves as if its names are placed within both the global namespace and the namespace std. It remains unspecified whether these names are first declared in the std:: namespace and injected into the global namespace or vice versa.
Preferred Approach
To ensure compatibility with future C++ revisions and remove potential ambiguities, it is recommended to use the "cname" headers and declare and define functions within the std:: namespace. Using the old ".h" headers is deprecated and has been identified for removal in upcoming revisions.
Example Code
Prefer the following code snippet:
#include <cstdio> int main() { std::printf("Hello world\n"); }
over:
#include <stdio.h> int main() { printf("Hello world\n"); }
Conclusion
While it's possible to use both std:: and the global namespace for C functions and headers in C++, the preferred approach is to include the "cname" headers and use the declarations and definitions from the std:: namespace for consistency with future C++ revisions and to avoid potential issues.
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!