C/C++ #include<> 和 #include““的区别

自定义头文件
该文章已生成可运行项目,

我们都听过这样的说法:

使用#include<> 程序会直接到标准函数库中找文件
使用#include"" 程序会会先从当前目录中找文件,如果找不到会再到标准函数库中找文件

所以,一般情况下我们引用标准函数库中的头文件时,用#include<>能有更高的效率,但是其实它的查找顺序非常严格:

1.#include<>

1.在编译器设置的include路径内搜索;
2.如果是在命令行中编译,则在系统的INCLUDE环境变量内搜索。

2 #include""
1.在包含当前include指令的文件所在的文件夹内搜索;
2.如果上一步找不到,则在之前已经使用include指令打开过的文件所在的文件夹内搜索,如果已经有多个被include的文件,则按照它们被打开的相反顺序去搜索;
3.如果上一步找不到,则在编译器设置的include路径内搜索;
4.如果上一步找不到,则在系统的INCLUDE环境变量内搜索。

所以,要注意的一点就是,如果我们自己写的头文件,而不是标准库函数中的,那么引用这个头文件要使用#include"",而不能使用#include<>,因为我们自己写的头文件并不在编译器设置的路径内,使用#include<>会提示无法找到。

本文章已经生成可运行项目
在C/C++中,`#include ""` `#include <>` 主要有使用场景查找目录两方面的区别: ### 使用场景不同 - `#include <>` 一般用于包含系统头文件,诸如 `stdlib.h`、`stdio.h`、`iostream` 等。 - `#include " "` 一般用于包含自定义头文件,如 `test.h`、`declare.h` 等 [^5]。 ### 查找的目录不同 - `#include<>`:编译器直接从系统类库目录里查找头文件。比如在VS2013中,编译器会直接在 `<VS 2013 安装目录>\VC\include` 目录下查找文件;在Linux GCC编译环境下,一般为 `/user/include` `/user/local/include`。如果类库目录下查找失败,编译器会终止查找,直接报错:`No such file or directory`。 - `#include ""`:默认从项目当前目录查找头文件,即项目工程文件(`*.vcxproj`)所在的目录。如果在项目当前目录下查找失败,再从项目配置的头文件引用目录查找头文件。在Windows VS编译环境下,在Linux GCC编译环境下,一般通过在 `Makefile` 文件中使用 `-L` 参数指定引用目录。如果项目配置的头文件引用目录中仍然查找失败,再从系统类库目录里查找头文件。因此,对于系统库头文件,`#include <>` `#include " "` 都能查找成功。不过,`#include " "` 查找顺序存在先后关系,如果项目当前目录或引用目录下存在与系统目录重名的头文件,就不会再去继续查找,存在头文件覆盖问题。另外,对于系统头文件,用 `#include<>` 包含,查找时一步到位,编译时效率更高 [^5]。 ### 代码示例 ```c // 使用 #include <> 包含系统头文件 #include <stdio.h> // 使用 #include "" 包含自定义头文件 #include "custom_header.h" int main() { // 调用系统库函数 printf("Hello, World!\n"); // 调用自定义头文件中的函数 custom_function(); return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值