【发布时间】:2013-11-05 15:03:58
【问题描述】:
假设我有这样的代码 sn-p:
#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 流,这可以解决问题,但我的问题更具理论性,并且用于自动包含的未来目的。
【问题讨论】:
-
为什么不呢?这不是被禁止的。由于您依赖非标准的“功能”,因此您的程序格式不正确。每次使用某些东西时都应该使用正确的标头,而不是依赖某些编译器为您包含它。
-
是的,ill-formed 是关键字。
-
谢谢。 “格式错误”的程序只是一个例子。如果忘记包含 文件并且它仍然可以正常工作而没有给我一个通知/警告,你有什么建议吗?
-
是的,Szymon:在与您评分相同的环境中进行测试。
-
这是
<cstdio>或<stdio.h>,而不是"cstdio.h"。