include包含头文件的语句中,双引号和尖括号的区别

本文详细解析了C语言中预处理器#include指令的两种使用形式,包括如何引用标准库头文件和非标准库头文件,以及编译器在不同情况下如何进行文件搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

include包含头文件的语句中,双引号和尖括号的区别

#include <>格式:引用标准库头文件,编译器从标准库目录开始搜索
#incluce ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索

预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中的这个位置一样。 
#include 指令有两种使用形式 
#include <stdio.h> 文件名放在尖括号中 
#include “mystuff.h” 文件名放在双引号中

尖括号< 和> 括起来表明这个文件是一个工程或标准头文件。查找过程会检查预定义的目录,我们可以通过设置搜索路径环境变量或命令行选项来修改这些目录。 
如果文件名用一对引号括起来则表明该文件是用户提供的头文件,查找该 
文件时将从当前文件目录(或文件名指定的其他目录)中寻找文件,然后再在标准位置寻找文件。

作者:蓝e
来源:优快云
原文:https://blog.youkuaiyun.com/finded/article/details/50478885
版权声明:本文为博主原创文章,转载请附上博文链接!

### C/C++ `#include` 指令 索引头文件 用法 #### 1. 头文件的两种形式 在C/C++中,`#include`指令用于引入头文件。它有两种主要的形式: - **双引号形式**:`#include "filename"` 这种方式优先从当前源文件所在的目录开始查找头文件[^1]。如果未找到,则继续按照系统的默认路径进行搜索。 - **尖括号形式**:`#include <filename>` 此方式直接跳过当前工作目录,仅按系统预设的标准路径来寻找头文件。 #### 2. 默认头文件搜索路径 GCC编译器下的默认头文件搜索顺序如下所示: - 对于`#include "..."`的情况,首先会在调用者的同级目录下尝试定位目标头文件; - 接着依次访问以下位置(具体取决于GCC版本及其配置): - `/usr/include/c++/5` - `/usr/include/x86_64-linux-gnu/c++/5` - `/usr/include/c++/5/backward` - `/usr/lib/gcc/x86_64-linux-gnu/5/include` - `/usr/local/include` - `/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed` - `/usr/include/x86_64-linux-gnu` - `/usr/include`[^1] 可以通过执行命令`echo | g++ -v -x c++ -E -`获取详细的搜索路径列表。 #### 3. 自定义头文件路径 当项目中的头文件不在默认路径范围内时,可以借助 `-I` 编译选项手动添加额外的搜索目录。例如: ```bash g++ -I/path/to/custom/header source.cpp -o output ``` 此操作会将 `/path/to/custom/header` 添加至头文件检索队列前端,从而允许编译器在此处发现所需的 `.h` 文件或其他扩展名的头文件。 #### 4. 预处理器行为特性 需要注意的是,所有的宏定义以及条件编译语句均属于预处理阶段的一部分。比如下面的例子展示了如何利用反斜杠`\`跨行书写复杂的宏定义[^2]: ```cpp #define OW "Consistency is the last refuge of the unimagina\ tive.- Oscar Wilde" ``` 另外,在实际开发过程中,合理运用这些机制可以帮助我们更好地管理大型项目的依赖关系并提高代码可读性维护效率。 #### 5. 使用现代技术简化指针打印 随着C++标准不断演进,新工具也逐渐被纳入其中。例如自C++20起新增加了一个强大的字符串格式化库 `<format>` ,它可以用来优雅地表示复杂数据结构如指针地址等信息[^3]: ```cpp #include <iostream> #include <format> int main(){ double d = 3.14; auto p = &d; // 打印指针值作为十六进制数 std::cout << std::format("{:p}", static_cast<void*>(p)) << '\n'; } ``` 以上方法不仅简洁明了而且具有良好的跨平台表现力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值