c++ - 哪些目录包含 C/C++ 中的语句搜索?

标签 c++ c include

test.c:

#include "file.h"

在上面的语句中,会搜索哪些目录?

我想应该会搜索test.c所在的目录吧?

但这就是全部吗?

顺便说一句,使用头文件有什么好处? Java 不需要头文件...

最佳答案

  • #include <header_name> : 标准包含文件:首先查看标准路径(编译器的系统包含路径设置)
  • #include "header_name" : 首先在当前路径中查找,然后在包含路径中查找(项目特定的查找路径)

使用头文件的好处是向其他人提供您的库的接口(interface),而无需实现。 Java 不需要它,因为 java 字节码或 jar 能够 self 描述(反射)。 C 代码不能(还)做到这一点。

在 Java 中,您只需要 jar 和正确的 use 语句。在 C 中,您(大部分)需要一个头文件和一个 lib 文件(或头文件和 dll)。

另一个原因是 c 代码的编译方式。编译器编译翻译单元(一个包含所有头文件的 c/cpp 文件),然后链接器在第二步链接所有内容。不得编译声明,这样可以节省时间并避免为链接器必须清理的每个编译单元生成无用的代码。

这只是一个大概的想法,我不是编译器专家,但应该有点帮助。

关于c++ - 哪些目录包含 C/C++ 中的语句搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024327/

相关文章:

c++ - 浮点 NaN 取决于 C++ 中不相关的异常处理

c++ - 作为类成员变量的指针/类中的动态内存

c++ - 编译c++时链接自定义头文件

c++ - 正则表达式模式的反向应用程序使用

c - 预处理器 : missing binary operator before token

c++ - 使用命名空间和包含

java - OpenCV Java,读取中心像素的HSV值

c - 子进程如何在读取第一条消息后不离开while循环?

c++ - 解决C++中3个类的循环包含

include - Smarty3 block 附加到包含的模板中