news 2026/10/7 5:00:18

【初识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.h、stdlib.h、math.h)、系统提供的头文件;
  • 示例:
#include<stdio.h>// 标准输入输出库#include<string.h>// 标准字符串库#include<math.h>// 标准数学库

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

  • 查找顺序:编译器先从当前项目路径(即源文件所在目录)查找,找不到再去系统标准库路径查找;
  • 适用场景:自己编写的头文件(如add.h、max.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/10/6 4:22:48

3个秘诀让你的VLC播放器界面彻底焕新

3个秘诀让你的VLC播放器界面彻底焕新 【免费下载链接】VeLoCity-Skin-for-VLC Castom skin for VLC Player 项目地址: https://gitcode.com/gh_mirrors/ve/VeLoCity-Skin-for-VLC 你是否曾遇到这样的困扰&#xff1a;打开VLC播放器时&#xff0c;总觉得界面与你的使用场…

作者头像 李华
网站建设 2026/10/6 4:22:29

升级Qwen-Image-Edit-2511后,图像编辑体验大幅提升

升级Qwen-Image-Edit-2511后&#xff0c;图像编辑体验大幅提升 如果你最近用过 Qwen-Image-Edit-2509 做商品图换背景、人像精修或海报风格迁移&#xff0c;大概率会遇到这几个“熟悉又恼人”的瞬间&#xff1a; 编辑完沙发&#xff0c;旁边的地毯颜色也悄悄偏了——图像漂移…

作者头像 李华
网站建设 2026/10/6 4:22:21

GLM-4.7-Flash镜像免配置:内置模型版本管理与热切换能力说明

GLM-4.7-Flash镜像免配置&#xff1a;内置模型版本管理与热切换能力说明 1. 为什么说“免配置”不是口号&#xff0c;而是真实体验 你有没有试过部署一个大模型&#xff0c;光是下载模型权重就卡在99%、改了十次config.json还是报CUDA out of memory、对着vLLM文档反复确认--…

作者头像 李华
网站建设 2026/10/6 4:22:20

RimSort模组管理器完全指南:从安装到高级应用的系统方法

RimSort模组管理器完全指南&#xff1a;从安装到高级应用的系统方法 【免费下载链接】RimSort 项目地址: https://gitcode.com/gh_mirrors/ri/RimSort 《环世界》玩家常面临模组管理的难题&#xff1a;数百个模组的加载顺序冲突、依赖关系复杂、版本不兼容等问题常常导…

作者头像 李华
网站建设 2026/10/5 13:40:54

Qwen2.5-VL视觉定位模型效果展示:输入一句话,AI自动标出目标

Qwen2.5-VL视觉定位模型效果展示&#xff1a;输入一句话&#xff0c;AI自动标出目标 你有没有试过这样的情景&#xff1a;翻着手机相册&#xff0c;想找一张“穿蓝裙子站在樱花树下的朋友”&#xff0c;却要在上百张照片里一张张点开确认&#xff1f;又或者在工业质检现场&…

作者头像 李华