当前位置: 首页 > news >正文

C语言中#include引用头文件的尖括号和双引号的区别

引言

在C语言开发中,#include预处理指令是每个程序员每天都会接触的核心语法。但你是否真正理解#include <header.h>#include "header.h"的区别?本文简要分析了这两种引用方式的异同。

一、基础语法对比

1. 尖括号<>

#include <stdio.h>      // 标准库头文件
#include <math.h>       // 数学函数库

2. 双引号""

#include "my_header.h"  // 自定义头文件
#include "../utils.h"   // 相对路径引用

二、核心区别详解

1. 头文件搜索路径顺序

引用方式搜索顺序
<>1. 编译器内置路径 → 2. 系统环境变量路径 → 3. 编译选项指定的路径(如-I
""1. 当前文件所在目录 → 2. 递归执行<>的搜索流程

在项目目录下创建test.h,分别用两种方式包含:

#include <test.h>  // 编译失败:File not found
#include "test.h"  // 成功编译

2. 预处理行为差异

  • <> 直接进入系统目录搜索

  • "" 先在本地目录查找,未找到时自动降级为<>模式

3. 编译速度影响

  • 使用""包含系统头文件可能导致冗余搜索,降低编译效率(实测差异可达5%-10%)

三、最佳实践场景

✅ 使用<>的情况

  1. 引用标准库头文件(stdio.h, stdlib.h等)

  2. 使用第三方库(如OpenGL的gl.h)

  3. 通过-I指定路径的公共头文件

✅ 使用""的情况

  1. 项目自定义头文件

  2. 相对路径引用#include "subdir/config.h"

  3. 需要覆盖系统头文件的特殊场景

❌ 典型错误案例

// 错误1:系统头文件用双引号
#include "stdio.h"     // 合法但低效// 错误2:自定义头文件用尖括号
#include <my_lib.h>    // 需要额外配置编译参数

 

2. 项目目录规范

推荐结构:

project/
├── include/     # 公共头文件(可用<>引用)
├── src/         # 源文件
└── lib/         # 第三方库

3. 防御式头文件设计

#ifndef MY_HEADER_H
#define MY_HEADER_H
// 内容区域
#endif

四、总结

特性#include <...>#include "..."
主要用途系统/标准库头文件用户自定义头文件
搜索优先级系统路径优先本地路径优先
编译效率可能较低
可配置性依赖环境变量支持相对路径
项目规范外部依赖内部实现

相关文章:

  • 【音视频工具】ffplay介绍
  • 线程的一些事(2)
  • 动态路由实现原理及前端控制与后端控制的核心差异
  • ‌中继器:网络中的“血包”与“加时器”‌
  • Ollama部署使用以及模型微调和本地部署
  • C++ stl中的set、multiset、map、multimap的相关函数用法
  • 计算机的三个根本性基础
  • Maven 公司内部私服中央仓库搭建 局域网仓库 资源共享 依赖包构建共享
  • 最长字符串 / STL+BFS
  • #微调重排序模型:Reranking从入门到实践
  • Dockerfile 完全指南:从入门到最佳实践
  • Linux 第七讲 --- 工具篇(二)gcc/g++与文件编译
  • 自然语言处理 (NLP) 入门:NLTK 与 SpaCy 的初体验
  • 北斗导航 | 深度学习与北斗导航定位算法结合思路、原理、公式、Python+matlab代码
  • 在 Java 中使用 org.json 和 JSON-B 解析与编写 JSON
  • Linux:44线程互斥lesson32
  • 【音视频工具】Hexinator安装、基本使用
  • 26考研——中央处理器_指令流水线_指令流水线的基本概念 流水线的基本实现(5)
  • IPLOOK超轻量核心网,助力5G专网和MEC边缘快速落地
  • Java 1.8(也称为Java 8)
  • 今天北京白天气温超30℃,晚间为何下冰雹?
  • 从普通人经历中发现历史,王笛解读《线索与痕迹》
  • 人民币对美元即期汇率盘中创半年新高,离岸市场升破7.2
  • 库尔德工人党决定自行解散
  • 1至4月我国汽车产销量首次双超千万辆
  • 普京提议重启俄乌直接谈判后,特朗普表态了