【发布时间】:2015-03-29 09:42:18
【问题描述】:
据我所知,cxyz 形式的标题与xyz.h 相同,唯一的区别是cxyz 将xyz.h 的所有内容放在命名空间std 下。为什么下面的程序都在 GCC 4.9 和 clang 6.0 上编译?
#include <cstdio>
int main() {
printf("Testing...");
return 0;
}
和第二个程序:
#include <cstdio>
int main() {
std::printf("Testing...");
return 0;
}
FILE 结构也是如此:
FILE* test = fopen("test.txt", "w");
和
std::FILE* test = std::fopen("test.txt", "w");
两者都有效。
到目前为止,我一直认为最好使用cstdio、cstring 等,而不是它们的非命名空间对应物。但是,以上两个程序中哪个是更好的做法?
其他 C 函数也是如此,例如 memset(来自 cstring)、scanf(也来自 cstdio)等。
(我知道有些人会问我为什么在 C++ 程序中使用 C IO;这里的问题不是专门针对 C IO,而是在调用命名空间 C 函数之前是否应该编译这段代码而不具体指定 std:: .)
【问题讨论】:
-
我明白了。因此,在我的代码中,如果我希望使用例如来自 cstring 标头的 memset,我应该使用哪种样式?写'std :: memset'还是'memset''更好
标签: c++ namespaces header-files