假设我有如下代码段:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
printf("%d",5);
}
它可以在我的Apple LLVM版本5.0(clang-500.2.79)(基于LLVM 3.3svn)编译器上正常运行,但是在gcc版本4.4.5(Debian 4.4.5-8)上失败,表示没有识别“ printf”功能。我的大学的教授使用后者,今天他们说我的程序不起作用。
我的问题是-在这种情况下,为什么clang(在OS X 10.9上由g ++ namefile.cpp运行)自动包含“ cstdio.h”?
PS。我知道C ++中有cin和cout流,并且可以解决该问题,但是我的问题是理论性更高的,并且出于将来自动包含的目的。
标准C ++标头允许包含任何其他标准标头。每个实现都可以选择确定哪些标头包含在其他标头中。您已经包含了iostream,并且允许包含cstdio,但是也不允许包含。您的Clang版本和教师的GCC版本显然采用了不同的选择。
最佳做法要求您明确包含所需的标头。不要指望您的实现隐式包含未提及的标头。从一个发行版更改为另一个发行版很容易,并且会影响可移植性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句