gpt4 book ai didi

c++ - 为什么 clang 会自动添加 "cstdio.h"?

转载 作者:太空狗 更新时间:2023-10-29 23:33:12 41 4
gpt4 key购买 nike

假设我有这样的代码片段:

#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”?

附言。我知道 C++ 中有 cin 和 cout 流,这可以解决问题,但我的问题更具理论性,并且是为了将来的自动包含目的。

最佳答案

允许标准 C++ 头文件包含任何其他标准头文件。每个实现都可以选择决定哪些 header 被其他 header 包含。您已经包括了 iostream,并且允许包括 cstdio,但也允许不包括。您的 Clang 版本和您的教师的 GCC 版本显然以不同方式执行了该选项。

最佳实践要求您明确包含所需的 header ;不要指望你的实现隐含地包含你没有提到的标题。它可能会从一个版本更改为另一个版本,并且会影响可移植性。

关于c++ - 为什么 clang 会自动添加 "cstdio.h"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19792052/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com