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.
The above is the detailed content of Should C functions and headers be used from the `std::` namespace or the global namespace in C ?. For more information, please follow other related articles on the PHP Chinese website!