C语言头文件路径相关问题总结说明

article/2025/9/17 8:59:37
聊聊系统路径位置,绝对路径与相对路径,正斜杠 `/` 与 反斜杠 `\` 使用说明   ......  by 矜辰所致

目录

  • 前言
  • 一、C语言中的头文件引用
  • 二、KEIL 中的头文件路径
    • 2.1 IncudePaths 指定的路径
      • 绝对路径和相对路径
      • 正斜杠 / 与 反斜杠 \ 与双斜杠
    • 2.2 include < > 搜索的系统路径
  • 三、Linux 中的头文件路径
  • 结语

前言

前段时间在写 Linux 专栏的过程中,忽然想到一个问题 :C语言的头文件路径,因为在GCC环境下面,可以很直观的了解到程序对头文件的查找位置,但是对于使用集成开发环境 KEIL 或者 IAR 的朋友们来说,一些系统的库文件路径根本就不知道在什么地方。

所以本文我们就来聊一下 C 语言的头文件路径相关的问题 ,包括系统路径位置,绝对路径与相对路径,正斜杠 / 与 反斜杠 \ 使用说明等。

我是矜辰所致,全网同名,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!

一、C语言中的头文件引用

我们都知道,在我们 C 编程的时候,我们头文件的引用使用的是 #include <> 或者 #include "",比如:

在这里插入图片描述

而且大家应该都知道:

  • include 使用双引号" ",编译器首先在当前目录下查找头文件,如果没有找到,再到系统目录下查找。
  • include 使用尖括号< >,编译器会到系统目录下查找头文件;

这里额外提一句,因为 使用双引号" “如果在当前目录找不到头文件,最终还是会去系统路径下寻找,所以头文件包含,完全可以都使用双引号” " ,至于实际中还是有很多使用 < > 和 " " 混搭,那是因为在确定是引用系统路径的头文件的时候,使用 < > 相对来说效率高那么一点点,省去了在当前目录下面寻找的那一点时间。

对于使用双引号" " 的当前目录下查找,大家应该都知道,就是与引用头文件的.c 文件相同的目录下,比如上面是 main.c 文件引用的,就是首先在与 main.c 相同的目录中去查找。

那么对于 < > 从系统路径中搜索,这个系统目录到底在哪里呢?

二、KEIL 中的头文件路径

我们先从我们熟悉的 IDE 入手,用 KEIL 来说明一下。

2.1 IncudePaths 指定的路径

在我们使用 KEIL 做项目的时候,都需要一个IncudePaths ,就是填写头文件路径,如下图所示:

KEIL4 上是51单片机的项目:

在这里插入图片描述

KEIL5 上是 STM32 的项目:

在这里插入图片描述

为了工程结构框架,我们不可能把文件放在同一个目录下面,所以需要进行额外的指定头文件路径,这里只要用过 KEIL 的朋友应该都能明白。

对于 include 使用双引号" "的头文件,首先会在引用头文件的.c 文件相同的目录下去查找,如果查找不到,会在上面 IncudePaths 设置中所有设置过的目录中去查找,这一点我们不多赘述。

绝对路径和相对路径

这里我们额外说明一个问题,绝对路径与相对路径。

在上面的示例图中,我们可以看到,IncudePaths 里面所添加的路径,都是 ../开头的,这种表示方式就是相对路径。

使用相对路径的好处是即便整个工程移动了位置,也无需修改什么设置,因为工程文件的相对位置没有改变。

简单复习下相对路径的表示:

./ : 表示当前路径
../:表示上一级目录

绝对路径就比较简单了,绝对路径就是直接从根部(盘符)开始表示的路径,在 Windows 中,就是 C盘,D盘,这些,在 Linux 中,没有盘符的说法,根部就是 / ,比如下面两个都是绝对路径的表示:

C:\Keil\C51
/home/qzh/linux

正斜杠 / 与 反斜杠 \ 与双斜杠

正好提到文件路径,顺带把斜杠的问题也说一下,在上面示意图中,我们可以看到,既有正斜杠,又有反斜杠:

在这里插入图片描述

对于路径的表示 ( 声明,这里只是针对文件路径!路径! )

  • Linux 中都使用正斜杠 /
    .
    Linux下好理解,只能用正斜杠 / :/home/qzh/linux
    .
  • 在Windows 中,稍微复杂一点
    .
    在Windows 中常用 反斜杠 \ ,比如我们随便看一个系统显示的路径都是反斜杠 \
    在这里插入图片描述
    .
    实际上,Windows 除了在一些特定的场合必须用反斜杠 \,在引用路径的时候斜杠/和反斜杠\可以互用的。

比如下面两种方式的引用都是可以的:

#include "..\led\led.h" #include "../led/led.h"  

为了可移植性,引入头文件时建议使用正斜杠/#include "../led/led.h"

不仅如此,在Windows下引用文件路径的时候,正反双斜杠//\\ 与斜杠 / 、反斜杠\可以互用的,如下图所示:

在这里插入图片描述

双斜杠

在写一些脚本或者程序的时候(上面是引用路径的情况,这里额外提一下程序中的情况,程序中!程序中!),我们也经常看到双斜杠,比如:

C:\\Keil\\C51

这种路径表示是为什么呢?

因为在大多编译器中,\是一个转义字符,例如\n,\r ,所以如果使用反斜杠 \,会使得路径出问题,所以会写成 \\

当然正如我们上面说过的,我们在程序中可以写成 C:\\Keil\\C51 ,当然也可以使用 斜杠 / 写成C:/Keil/C51

2.2 include < > 搜索的系统路径

额外提了那么多,回到我们的正题,来说说在 KEIL 中的 #include < > 的查找路径。

比如我们在本文第一张示意图上有一个应用#include <math.h>,我们明确的告诉编译器这个需要从系统路径中去查找,这个 KEIL 所谓的系统路径在什么地方呢?

这里我们也没什么好分析的,直接告诉大家答案:

第一个基于51平台的,使用的 51 的编译器, #include < > 的查找路径为“KEIL的安装目录”:\Keil\C51\INC ,比如博主的KEIL安装在C盘,这个路径就是C:\Keil\C51\INC

在这里插入图片描述

当然,我们可以简单的做个试验确认一下,我们可以在 KEIL 中先打开 这个头文件:

在这里插入图片描述

然后我们打开C:\Keil\C51\INC 目录下的 MATH.h 文件,进行简单的修改,然后看一下是否是同一个文件,如下图:

在这里插入图片描述

那么对于 KEIL5 中的 STM32 中如果使用 #include < > ,那么这个的查找路径又是怎样的呢?

STM32 在 KEIL中使用的编译器为 ARMCC,这个系统路径的位置为:“KEIL的安装目录”:\Keil_v5\ARM\ARMCC\include ,比如博主的KEIL安装在C盘,这个路径就是C:\Keil_v5\ARM\ARMCC\include

这一点我就不去确定了,大家可以自己添加一个库函数头文件,然后自己根据上文的方式测试一下便知。

三、Linux 中的头文件路径

上面介绍了 Windows 下的 KEIL 环境中的头文件系统路径,那么我们来看看 Linux 中的路径又是在哪里,我们知道在 Linux 中 C 语言的编译器是 GCC 编译器,在文章开头的前言我就写过了, 使用 GCC 编译器可以很直观的查看到 #include < > 尖括号包含的头文件的查找路径,下面我们来看一下。

在这里插入图片描述

写一个简单的程序,里面用到了 <stdio.h> 这个头文件,我们可以使用编译选项 -v 来打印出详细的编译步骤:

在这里插入图片描述

如上图所示,在 Linux 是不是很直观,没什么需要特别说明的。

那么我们再换另外一种编译器,其实还是 GCC ,只不过是 ARMGCC,我们也来看一看:

在这里插入图片描述
可以看到,同样的可以很直观的看到尖括号包含的头文件的搜索位置,当然,因为编译器的更换,他们搜索的位置也改变了。

最后简单总结一下,使用 #include < > 所包含的头文件,其查找路径和使用的编译器有关,编译器都会自带常用的库文件,在 GCC 环境下面,使用 -v 选项就会自动打印出查找位置,使用 IDE 环境根据 IDE 使用的编译器不同存放在对应的目录文件下面,一般来说都可以在 IDE 安装目录中可以找到。

结语

本文我们针对 C 语言头文件路径问题进行了讲解,举例说明了 Windows 下的 IDE 环境中 和 Linux 下GCC 环境中的C语言的 头文件查找路径。

文中还对引出的绝对路径与相对路径,还有路径引用时候的 正斜杠 / 与 反斜杠 \ 与双斜杠 进行了说明。

希望大家以后在遇到头文件路径问题的时候,能够知道如何去查找问题,解决问题!

好了,本文就到这里,谢谢大家!


http://chatgpt.dhexx.cn/article/shemvRnl.shtml

相关文章

c语言头文件下载大全,求C语言头文件下载?

传统 C++ #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> //定义错误码 #include <float.h> //浮点数处理 #include <fstream.h> //文件输入/输出 #include <iomanip.h> //参数化输入/输出 #inclu…

python读取C语言头文件

本文测试过程使用使用的工程代码上传 python读取C语言头文件&#xff0c;参考博客&#xff0c;有测试记录、使用说明资源-CSDN文库 或者 python读取C语言头文件测试用例&#xff0c;参考博客&#xff0c;有详细说明-嵌入式文档类资源-CSDN文库 背景 在使用python编程过程中…

c语言中头文件及其作用,C语言头文件的作用是什么

C语言头文件的作用&#xff1a;1、头文件是程序各部分之间保证信息一致性的桥梁&#xff0c;是连接程序对象定义和使用的纽带&#xff1b;2、用于指定模块接口的声明放在文件中&#xff0c;文件名中应标明其预期用途。 本文操作环境&#xff1a;Windows7系统&#xff0c;宏基S4…

c语言头文件编写

使用头文件的作用&#xff1a;当前.c文件要使用其它.c文件已定义的全局函数/全局变量时&#xff0c;对使用的全局函数/全局变量进行声明。 文件包含&#xff1a;文件包含语句的功能是把指定的文件插入该语句行位置&#xff0c;从而把指定的文件和当前的源程序文件连成一个源文件…

编写C语言头文件

C语言头文件 我们写c语言代码的第一步总是#include … 这就是引入头文件。#include 命令是预处理命令的一种&#xff0c;预处理命令可以将别的源代码内容插入到所指定的位置&#xff1b;可以标识出只有在特定条件下才会被编译的某一段程序代码&#xff1b;可以定义类似标识符功…

【C语言】头文件书写方法与规范、code::black中如何创建并编写头文件(一看就会)

目录 其他编译器用户&#xff0c;可以直接跳过标题1&#xff0c;看2.头文件编写注意事项&#xff0c;下面有跳转链接&#xff1a; 1.C::B中创建头文件&#xff1a; 2.头文件编写注意事项 3.C语言常见问题推荐链接 1.C::B中创建头文件&#xff1a; file -> new -> fi…

C语言头文件详解

1、include的作用 简单一句话&#xff1a;在include的地方&#xff0c;把头文件里的内容原封不动的复制到引用该头文件的地方。 2、头文件的引用 头文件引用有两种形式&#xff1a;#include < stdio.h> 和 include "main.h “。 用< >引用的一般是编译器提供的…

C++——友元

友元概述 在讲述类的内容时说明了隐藏数据成员的好处&#xff0c;但是有些时候&#xff0c;类会允许有一些特殊的函数直接读写其私有数据成员。 使用friend关键字可以让特定的函数或者别的类的所有成员函数对私有数据成员进行读写。这既可以保持数据的私有性&#xff0c;又能够…

C++之友元函数

目录 1.定义&#xff1a; 1.概念&#xff1a; 2.注意 3.友元的分类&#xff1a; 4.友元函数代码分析&#xff1a; 1.友元函数出现的原因&#xff08;外部函数友元为例&#xff09;&#xff1a; 2.一个外部函数作为多个类的友元函数 3.成员函数友元&#xff1a; 4.类友…

友元 基础详解版 (友元函数、友元类、友元非成员函数和友元成员函数)

友元 一般来说&#xff0c;类的公有成员能够在类外访问&#xff0c;私有的成员只能被类的其他成员函数访问。 在C中&#xff0c;可以定义友元&#xff0c;如果某一个函数定义为类的友元&#xff0c;则该函数就可以访问该类的私有函数。也可以把一个类定义为另一个类的友元。 …

win7快捷方式去箭头_win7旗舰版桌面图标快捷方式箭头变成黑块怎么办?

大家在使用win7的过程中&#xff0c;发现桌面图标快捷方式箭头变成黑块&#xff0c;这时我们应该怎么解决呢&#xff0c;请继续往下看&#xff01; 操作过程&#xff1a; 1、在winr调出运行窗口&#xff0c;键入regedit.exe&#xff0c;回车&#xff0c;打开注册表编辑器。 依次…

去掉桌面快捷方式箭头和快捷方式字样--美化桌面快捷方式

去掉桌面快捷方式箭头和快捷方式字样--美化桌面快捷方式&#xff0c;如图&#xff1a; 下载地址&#xff1a; https://download.csdn.net/download/lhyhr/12700649

恢复Windows7快捷方式小箭头的方法

电脑重新安装了一个Windows7的纯净版系统&#xff0c;结果快捷方式的小箭头不见了。在网上查到的各种修改注册表的方式都试过之后&#xff0c;依然无效。 后来看到有人介绍可以使用软件恢复&#xff0c;于是下载了一个软件&#xff1a;Windows快捷方式小箭头管理&#xff0c;结…

Windows系统桌面快捷方式图标去除小箭头

在注册表”HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons“项下新建字符串值&#xff0c;命名为29&#xff0c;数据为&#xff1a;”%systemroot%\system32\imageres.dll,197“。 注销重新登录后小箭头即不显示&#xff0c;反之则删除名…

win8电脑怎么把计算机快捷方式,Win8怎么隐藏桌面快捷方式小箭头_Win8去掉快捷方式箭头-192路由网...

本文主要介绍了Win8电脑上&#xff0c;去掉桌面快捷方式小箭头的方法。Win8电脑桌面上的快捷方式&#xff0c;默认是有一个小箭头的&#xff0c;看起来非常不美观。 因此&#xff0c;很多用户想把Win8快捷方式上的小箭头去掉&#xff0c;却又不知道应该如何设置。 其实去掉Win8…

去除win10桌面图标快捷方式小箭头

同样用命令行来解决&#xff0c;管理员打开CMD&#xff0c;输入下面代码 &#xff08;也可以做成bat批处理文件&#xff0c;管理员运行&#xff09; 移除小箭头&#xff1a; reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Ic…

Win11清除桌面快捷方式小箭头

Win11清除桌面快捷方式小箭头 1.WinR输入regedit&#xff0c;进入注册表。 2.找到路径\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons 选择右边名称为29的项&#xff08;部分电脑系统没有Shell Icons这个选项&#xff0c;那么在上一级…

玩机技巧|去除Windows桌面快捷方式图标左下角上的小箭头

当我们下载了软件之后在桌面上左下角都会有一个快捷方式的小箭头&#xff0c;如何去掉这个小箭头让桌面图标变得更加清爽一些呢。现在教大家一个简单的办法。 修改注册表 编辑代码 管理员身份运行 选择去除小箭头 检测 恢复小箭头 修改注册表 去除这个小箭头的方法很简单&…

win10去掉快捷方式小箭头(win10桌面快捷方式小箭头怎么去掉)

桌面快捷方式小箭头怎么去掉 在我的电脑处右击——属性——高级——性能中的设置——视觉效果中选择调整为最佳外观&#xff0c;确定后即可。或者选择自定义&#xff0c;然后在窗口里把“在桌面上为图标标签使用阴影”这条前面的勾去掉就行了。 WIN10怎么去掉快捷方式小箭头&am…

如何恢复快捷方式上的小箭头

接上一篇博客&#xff0c;我们应该怎么把已经去掉的小箭头恢复。 第一步&#xff0c;新建一个txt文本文档&#xff0c;输入中括号内的内容&#xff1a; 【 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\PIPFile] “IsShortcut”"" [HKEY_CLASSES_ROOT\…