为什么自动添加库?

Why libraries automatically added?

本文关键字:添加 为什么      更新时间:2023-10-16

我在Visual Studio 2019中创建了一个项目。(> Windows 桌面向导>控制台应用程序创建一个项目,并取消选中所有选项。

截图

像这样的代码正在工作,但我没有在代码中添加 math.h 库。我不明白为什么 sqrt 函数可以正常工作。

#include <iostream>
int main()
{
std::cout << sqrt(9);
}

假设您有以下文件:

a.h
b.h
main.cpp

主要你有:

#include <a.h>
int main() {
// Use func from a.h
aFunc();
// Use func from b.h
bFunc();
}

就像你的情况一样,假设这没有问题。那么程序如何知道bFunc是什么呢?

可能的答案是a.h看起来像这样:

#include <b.h>
aFunc();

这意味着当你包括a.h时,你也包括了来自内部b.h

现在,如果您专门使用b.h函数,那么在main中包含b.h被认为是很好的做法。如果设置了包含保护,那么应该没有问题,并且更容易阅读代码。

如果其他一些#include包含缺少的标头,则可能会发生这种情况,但您不应依赖此标头。例如,此代码不能在 gcc 或 clang 中编译。

但即使它现在编译,如果不在同一编译器的未来版本中包含缺少的标头,它可能无法编译。我最近实际上遇到了这个问题,我在文件中使用std::runtime_error而没有包括<stdexcept>.它工作了多年,然后当 Arch 将 gcc 更新到版本 10 时,它停止编译,我不得不添加缺少的包含。