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

【C语言】头文件”“和<>的详解

前言

        作者在刚开始学C语言的时候,都是用的< >去引用头文件,但在学习STM32的时候发现,程序中大量使用" "去引用双引号。

        那么二者有什么区别呢?

        无论使用哪种方式,头文件的目的都是为了引用你需要的文件供你编程使用,那么这里就有一个很重要的问题:程序怎么知道你的头文件在哪?

#include <xxx.h>

        当使用<>来包含头文件时,编译器直接在系统的标准库路径中查找头文件,不会在当前源文件所在目录中查找。这种方式主要用于标准库的头文件,如stdio.h、stdlib.h等。

        以DEV C++为例,点击工具->编译选项->目录,可以看到这就是编译器的默认的系统标准库路径。

#include "xxx.h"

        当使用双引号来包含头文件时,编译器首先会在当前源文件所在的目录中查找指定的头文件。如果找不到,编译器会按照系统设置的标准路径去查找。这种方式通常用于项目内部的头文件,即用户自定义的头文件。

        假设你的C语言文件(main.c)是在D盘的project文件夹中,同时你自定义了一个头文件myheader.h,放在C语言文件的同目录中的include文件夹中,结构如图:

D/    
└──project/├── main.c└── include/└── myheader.h

 你需要引用myheader.h,可以这样写:

#include "include/myheader.h"

     编译器从当前源文件所在目录既main.c所在目录开始寻找include文件夹下的myheader.h
 

 < >和" "主要区别

  1. 查询头文件的起始位置不一样,<>从系统目录中查找;""从源文件目录中开始查找
  2. 查询范围不一样,<>只查系统目录;""查完源文件目录后如果没找到目标文件,就会查一遍系统目录

< > 和" "的兼容问题

        < >搜索路径查找头文件

        我们知道的是" "可以在里面写路径,去查找源文件目录下的自定义头文件;但很少人知道的是,< >也可以写入路径,去查找系统目录下头文件,但为什么不用呢?

因为<>会将系统目录下的内容全部扫描一遍,因此不需要写路径。

        但在某些情况下,也可以在尖括号中指定路径来引用头文件。这通常取决于编译器的实现和配置。

  1. 编译器支持:某些编译器可能允许在尖括号中指定相对路径或绝对路径来引用头文件。然而,这并不是标准做法,且可能不具有可移植性

  2. 项目配置:在大型项目中,可能会通过配置文件或编译选项来指定额外的头文件搜索路径。在这种情况下,即使使用尖括号,编译器也可能会在这些指定的路径中查找头文件。

  3. 示例:假设有一个自定义头文件mycustomlib.h位于项目的include/custom目录下,并且该目录已经被添加到编译器的包含路径中。那么,可以使用尖括号来引用这个头文

#include <custom/mycustomlib.h>

        【注意】这里最重要的是< >搜索路径,必须将目录添加到编译器包含的路径中才允许

        " "查找系统库头文件

        之前提到过," "会先查源文件目录,没找到头文件之后就会查系统库,因此" "是兼容< >的功能的,例如:

#include "stdio.h"

 这是被允许的,也可以找到这个头文件,但相对< >而言就会慢一点

总结

        无论是哪种方式,其根本目的还是为了找到相应的头文件,<>常用于系统库头文件的引用,""常用于自定义头文件,其本质区别在于搜索头文件的目录上。两者并非一成不变的,可以根据使用者的习惯灵活使用。

相关文章:

【C语言】头文件”“和<>的详解

前言 作者在刚开始学C语言的时候&#xff0c;都是用的< >去引用头文件&#xff0c;但在学习STM32的时候发现&#xff0c;程序中大量使用" "去引用双引号。 那么二者有什么区别呢? 无论使用哪种方式&#xff0c;头文件的目的都是为了引用你需要的文件供你编程使…...

Elasticsearch:什么是信息检索?

信息检索定义 信息检索 (IR) 是一种有助于从大量非结构化或半结构化数据中有效、高效地检索相关信息的过程。信息&#xff08;IR&#xff09;检索系统有助于搜索、定位和呈现与用户的搜索查询或信息需求相匹配的信息。 作为信息访问的主要形式&#xff0c;信息检索是每天使用…...

Spark-Streaming容错语义

一、背景 为了理解Spark Streaming提供的语义&#xff0c;我们先回顾西Spark RDD的基本容错语义学。 RDD是一个不可变的、确定性可重新计算的分布式数据集。每个RDD都记住在容错输入数据集上用于创建它的确定性操作的沿袭。如果RDD的任何分区由于工作节点故障而丢失&#xff…...

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程 产品介绍 仿东郊到家约玩系统是一种新兴的线上预约&#xff0c;线下社交、陪伴、助娱、助攻、分享、解答、指导等服务模式&#xff0c;范围涉及电竞、运动、音乐…...

GUI07-学工具栏,懂MVC

MVC模式&#xff0c;是天底下编写GUI程序最为经典、实效的一种软件架构模式。当一个人学完菜单栏、开始学习工具栏时&#xff0c;就是他的一生中&#xff0c;最适合开始认识 MVC 模式的好时机之一。这节将安排您学习&#xff1a; Model-View-Controller 模式如何创建工具栏以及…...

【进程篇】04.进程的状态与优先级

一、进程的状态 1.1 进程的状态 1.1.1 并行与并发 • 并行: 多个进程在多个CPU下分别&#xff0c;同时进行运行 • 并发: 多个进程在一个CPU下采用进程切换的方式&#xff0c;在一个时间片内&#xff0c;让多个进程都得以推进 1.1.2 时间片的概念 LInux/windows这些民用级别…...

ElasticSearch 数据聚合与运算

1、数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多&#xff0c;而且查询速度非常快&#xff0c;可以实现近实时搜索效果。 注意&#xff1a; 参加聚合的字段必须是 keywor…...

科研学习|论文解读——智能体最新研究进展

从2024-12-13到2024-12-18的45篇文章中精选出5篇优秀的工作分享 Can Modern LLMs Act as Agent Cores in Radiology~Environments? Achieving Collective Welfare in Multi-Agent Reinforcement Learning via Suggestion Sharing A systematic review of norm emergence in …...

面试小札:Java后端闪电五连鞭_8

1. Kafka消息模型及其组成部分 - 消息&#xff08;Message&#xff09;&#xff1a;是Kafka中最基本的数据单元。消息包含一个键&#xff08;key&#xff09;、一个值&#xff08;value&#xff09;和一个时间戳&#xff08;timestamp&#xff09;。键可以用于对消息进行分区等…...

java error(2)保存时间带时分秒,回显时分秒变成00:00:00

超简单&#xff0c;顺带记录一下 1.入参实体类上使用注释&#xff1a;JsonFormat(pattern “yyyy-MM-dd”) 导致舍弃了 时分秒的部分。 2.数据库字段对应的类型是 date。date就是日期&#xff0c;日期就不带时分秒。 3.返参实体类使用了JsonFormat(pattern “yyyy-MM-dd”) 导…...

计算机毕业设计python+spark+hive动漫推荐系统 漫画推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?

TSMC 12nm A72项目我们需要按照foundary的要求提前在floorplan阶段加好TCD Cell。这个cell是用来做工艺校准的。这个dummy TCD Cell也可以等后续Calibre 插dummy自动插。但咱们项目要求提前在floorplan阶段就先预先规划好位置。 TSCM12nm 1P9M的metal stack结构图如下图所示。…...

(8)YOLOv6算法基本原理

一、YOLOv6 模型原理 发布日期&#xff1a;2022年6月 作者&#xff1a;美团技术团队 骨干网络&#xff1a;参考了 RepVGG 的设计&#xff0c;将重参数化能力进行补强&#xff0c;增强了模型结构的重参数化能力。使用了深度可分离卷积和跨阶段连接等技术&#xff0c;旨在提升…...

LNMP+discuz论坛

0.准备 文章目录 0.准备1.nginx2.mysql2.1 mysql82.2 mysql5.7 3.php4.测试php访问mysql5.部署 Discuz6.其他 yum源&#xff1a; # 没有wget&#xff0c;用这个 # curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo[rootlocalhost ~]#…...

在linux系统的docker中安装GitLab

一、安装GitLab&#xff1a; 在安装了docker之后就是下载安装GitLab了&#xff0c;在linux系统中输入命令&#xff1a;docker search gitlab就可以看到很多项目&#xff0c;一般安装第一个&#xff0c;它是英文版的&#xff0c;如果英文不好可以安装twang2218/gitlab-ce-zh。 …...

Python面试常见问题及答案12

问题&#xff1a; 请解释Python中的GIL&#xff08;全局解释器锁&#xff09;是什么&#xff1f; ○ 答案&#xff1a; GIL是Python解释器中的一种机制&#xff0c;用于确保任何时候只有一个线程在执行Python字节码。这在多线程场景下可能影响性能优化&#xff0c;但对于单线程…...

从0-1开发一个Vue3前端系统页面-9.博客页面布局

本节主要实现了博客首页界面的基本布局并完善了响应式布局&#xff0c;因为完善了响应式布局故对前面的页面布局有所改动&#xff0c;这里会将改动后的源码同步上传。 1.对页面头部的用户信息进行设计和美化 布局设计参考 &#xff1a;通常初级前端的布局会通过多个div划分区域…...

[手机Linux] 六,ubuntu18.04私有网盘(NextCloud)安装

一&#xff0c;LNMP介绍 LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQ…...

白话java设计模式

创建模式 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a; 就是一次创建多次使用&#xff0c;它的对象不会重复创建&#xff0c;可以全局来共享状态。 工厂模式&#xff08;Factory Method Pattern&#xff09;&#xff1a; 可以通过接口来进行实例化创建&a…...

助力 Tuanjie OpenHarmony 开发:如何使用工具包 Hilog 和 SDK Kits Package?

随着团结引擎从 1.0.0 迭代至 1.3.0&#xff0c;越来越多的开发者开始使用团结引擎开发 OpenHarmony 应用。 在开发的过程中&#xff0c;我们也收到了大量反馈&#xff0c;尤其是在日志、堆栈和性能数据方面&#xff0c;这些信息对开发和调试过程至关重要。同时&#xff0c;我…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...