news 2026/3/28 7:52:46

【初识C语言】include头文件双引号““和尖括号<>的区别以及使用顺序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【初识C语言】include头文件双引号““和尖括号<>的区别以及使用顺序

系列文章目录

学习系列文章:
【初识C语言】选择结构(if语句和switch语句)详细解答
【初识C语言】循环结构(while语句、do…while语句和for语句)详细解答
【初识C语言】数组(一维数组和二维数组)详细解答+避坑
【初识C语言】C语言指针从入门到进阶详细解答
【初识C语言】字符 / 字符串函数 + 内存函数(详解+模拟实现+避坑)
【初识C语言】探究数据在内存中的存储(整型、浮点型)

理解函数文章:
【初识C语言】qsort 函数保姆级教程,搞定各种数据类型的排序

实战项目文章:
【初识C语言】经典扫雷C语言实战(原码+解析),看完就能上手拆解与修改


文章目录

  • 系列文章目录
  • 核心结论
  • 一、尖括号<> vs 双引号 ""
    • 1. 尖括号<>:标准库头文件专用
    • 2. 双引号 “”:自定义头文件专用
    • 3. 关键对比
  • 二、include 头文件的使用顺序:遵循 “先本地,后系统” 原则
    • 1. 推荐顺序(从局部到全局)
    • 2. 为什么要这样排序?
    • 3. 错误顺序示例(不推荐)
  • 三、特殊场景说明
    • 1. 双引号也能包含标准库头文件(不推荐)
    • 2. 尖括号不能包含项目路径下的头文件(除非配置编译器)
    • 3. 嵌套包含的优先级
  • 总结

核心结论

尖括号<>用于标准库头文件(编译器优先查系统路径);
双引号""用于自定义头文件(编译器优先查项目路径);
使用包含顺序建议 “先自定义 / 本地头文件,后标准库头文件”,避免依赖冲突。


一、尖括号<> vs 双引号 “”

两者的本质区别是头文件的查找顺序不同,直接决定了编译器能快速找到哪个路径下的头文件。

1. 尖括号<>:标准库头文件专用

  • 查找顺序:编译器先从系统默认的标准库路径查找(如/usr/include、VS 的VC\include目录),找不到才可能查项目路径(部分编译器支持,不依赖);
  • 适用场景:C 语言标准库头文件(如stdio.hstdlib.hmath.h)、系统提供的头文件;
  • 示例:
#include<stdio.h>// 标准输入输出库#include<string.h>// 标准字符串库#include<math.h>// 标准数学库

2. 双引号 “”:自定义头文件专用

  • 查找顺序:编译器先从当前项目路径(即源文件所在目录)查找,找不到再去系统标准库路径查找;
  • 适用场景:自己编写的头文件(如add.hmax.h)、项目内的第三方头文件;
  • 示例:
#include"add.h"// 自己编写的加法函数头文件#include"max.h"// 自己编写的最大值函数头文件

3. 关键对比

包含方式查找优先级适用场景核心优势
尖括号<>系统路径 > 项目路径标准库头文件查找速度快,明确区分标准库和自定义文件
双引号 “”项目路径 > 系统路径自定义 / 项目内头文件优先匹配本地文件,支持相对路径

二、include 头文件的使用顺序:遵循 “先本地,后系统” 原则

头文件的包含顺序虽无强制语法要求,但不规范的顺序可能导致 “未定义标识符” 等编译错误,行业通用规则是:先包含自定义 / 本地头文件,再包含标准库头文件

1. 推荐顺序(从局部到全局)

// 第1层:当前源文件对应的头文件(如果有)#include"my_program.h"// 第2层:项目内的其他自定义头文件(本地依赖)#include"add.h"#include"max.h"// 第3层:第三方库头文件(如开源库、SDK)#include"third_party/log.h"// 第4层:C语言标准库头文件(系统依赖)#include<stdio.h>#include<string.h>#include<math.h>

2. 为什么要这样排序?

  • 避免依赖缺失:自定义头文件可能依赖标准库,但标准库头文件不依赖自定义文件。先包含自定义文件,能快速暴露 “自定义文件依赖但未包含的标准库” 问题;
  • 减少编译冲突:如果自定义头文件和标准库头文件有同名宏 / 类型,优先使用自定义文件的定义(符合项目开发需求);
  • 符合行业惯例:主流开源项目(如 Linux 内核、Redis)均采用此顺序,提高代码可读性和可维护性。

3. 错误顺序示例(不推荐)

// 错误:先包含标准库,再包含自定义文件#include<stdio.h>#include"add.h"// 若add.h依赖stdio.h中的类型,看似没问题,但不符合规范
  • 潜在风险:如果自定义头文件依赖其他未包含的标准库,编译器会报错,且排查难度增加。

三、特殊场景说明

1. 双引号也能包含标准库头文件(不推荐)

理论上,用""也能包含标准库头文件(如#include "stdio.h"),因为编译器找不到时会 fallback 到系统路径,但不推荐:

  • 查找速度变慢(多一次项目路径查找);
  • 代码可读性差,无法区分标准库和自定义文件。

2. 尖括号不能包含项目路径下的头文件(除非配置编译器)

如果强行用<>包含自定义文件(如#include <add.h>),编译器会直接去系统路径查找,找不到则编译报错。若需支持,需手动配置编译器的 “额外头文件路径”(如 GCC 的-I参数、VS 的 “附加包含目录”)。

3. 嵌套包含的优先级

如果头文件 A 包含头文件 B,B 的查找顺序遵循自身的包含方式(""<>),与 A 的包含方式无关:

// add.h(自定义文件)#include<stdio.h>// 按尖括号规则查找stdio.h(系统路径)// main.c#include"add.h"// 按双引号规则查找add.h(项目路径),add.h中的#include <stdio.h>仍查系统路径

总结

  1. 区分""<>:看头文件来源 —— 标准库用<>,自定义 / 项目内用""
  2. 包含顺序:本地头文件 → 第三方库头文件 → 标准库头文件,从局部到全局;
  3. 核心原则:明确区分文件类型,减少查找开销,避免编译冲突。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 7:57:45

RTX 4090极速体验:Qwen2.5-VL-7B视觉任务一键搞定

RTX 4090极速体验&#xff1a;Qwen2.5-VL-7B视觉任务一键搞定 1. 这不是另一个“能看图”的模型&#xff0c;而是你桌面上的视觉工作台 你有没有过这样的时刻&#xff1a; 一张模糊的发票截图躺在微信里&#xff0c;要手动抄录12行数字&#xff1b; 网页设计稿刚改完&#xff0…

作者头像 李华
网站建设 2026/3/15 22:34:55

Qwen2.5-VL-7B-Instruct实战教程:Ollama部署+图像点选定位+坐标输出

Qwen2.5-VL-7B-Instruct实战教程&#xff1a;Ollama部署图像点选定位坐标输出 你是不是也遇到过这样的问题&#xff1a;一张产品图里有多个按钮&#xff0c;想让AI准确告诉你“立即购买”按钮在图片里的具体位置&#xff1f;或者需要从设计稿中自动提取某个图标坐标用于前端开…

作者头像 李华
网站建设 2026/3/24 10:01:29

阿里达摩院MT5体验:中文句子一键裂变5种表达

阿里达摩院MT5体验&#xff1a;中文句子一键裂变5种表达 1. 这不是“改写工具”&#xff0c;而是你的中文表达加速器 你有没有过这样的时刻&#xff1a; 写完一段话&#xff0c;总觉得“差点意思”——不够精炼、不够专业、不够有传播力&#xff1f; 想给产品文案多准备几个版本…

作者头像 李华
网站建设 2026/3/22 2:32:34

USB3.2速度硬件验证测试点布局建议

以下是对您提供的技术博文进行 深度润色与工程化重构后的终稿 。全文已彻底去除AI生成痕迹&#xff0c;强化了真实工程师视角的实战语感、逻辑节奏与行业洞察&#xff1b;结构上打破传统“引言-原理-应用-总结”的模板化框架&#xff0c;转而以 问题驱动、场景切入、层层递进…

作者头像 李华
网站建设 2026/3/26 15:16:55

深入解析LCD1602时序控制:从原理到代码实现

1. LCD1602液晶屏基础认知 第一次接触LCD1602时&#xff0c;我盯着这个只有两行字符显示的小屏幕&#xff0c;完全不明白它为什么需要16个引脚。后来才发现&#xff0c;这16个引脚就像是一个精密的控制面板&#xff0c;每个引脚都有特定的职责。最让我惊讶的是&#xff0c;这个…

作者头像 李华
网站建设 2026/3/27 7:24:35

实测分享:Qwen2.5-7B指令微调,单卡高效训练体验

实测分享&#xff1a;Qwen2.5-7B指令微调&#xff0c;单卡高效训练体验 你是否也经历过这样的困扰&#xff1a;想让大模型记住自己的身份、风格或业务规则&#xff0c;却卡在环境配置、显存不足、参数调不稳的泥潭里&#xff1f;下载模型、装依赖、改配置、调batch size……一…

作者头像 李华