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

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 "..."
主要用途系统/标准库头文件用户自定义头文件
搜索优先级系统路径优先本地路径优先
编译效率可能较低
可配置性依赖环境变量支持相对路径
项目规范外部依赖内部实现
http://www.xdnf.cn/news/5319.html

相关文章:

  • 情书大全v3.0.1
  • 【网络分析工具】网络工具wireshark、TCPdump、iperf使用详解
  • 招行数字金融挑战赛数据分析赛带赛题二
  • CSS Layer 详解
  • SAP学习笔记 - 开发08 - Eclipse连接到 BTP Cockpit实例
  • 20242817-李臻-课下作业:Qt和Sqlite
  • 【vue】计算属性和属性传值以及监听属性
  • 【数据结构】线性表
  • Linux 常用命令集合
  • 开源字体设计工具字玩 FontPlayer
  • 【Bluedroid】HID DEVICE 连接的源码分析
  • MIT XV6 - 1.5 Lab: Xv6 and Unix utilities - xargs
  • Qt—多线程基础
  • 医药研发加速器!AI如何助力新药问世?
  • Unity中AssetBundle使用整理(一)
  • 模型过拟合是什么?
  • 【东枫科技】使用LabVIEW进行NVIDIA CUDA GPU 开发
  • AI智慧公园管理方案:用科技重塑市民的“夜游体验”
  • 【C++】内存管理 —— new 和 delete
  • Lora原理及实现浅析
  • 【C++】特殊类设计
  • 支持向量机与逻辑回归的区别及 SVM 在图像分类中的应用
  • matlab中的积分函数
  • 【Java学习日记34】:this关键字和成员变量
  • armv7 backtrace
  • LoRA(Low-Rank Adaptation)原理详解
  • 【ajax基础】
  • 深入理解深度Q网络DQN:基于python从零实现
  • OB Cloud 云数据库V4.3:SQL +AI全新体验
  • redis主从同步于对象模型