IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 第十四章 C语言头文件的编写_C语言标准库以及标准头文件 -> 正文阅读

[C++知识库]第十四章 C语言头文件的编写_C语言标准库以及标准头文件

我们常说,引入编译器自带的头文件(包括标准头文件)用尖括号,引入程序自定义的头文件用双引号,例如:

使用尖括号< >,编译器会到系统路径下查找头文件;而使用双引号" ",编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找。也就是说,使用双引号比使用尖括号多了一个查找路径,它的功能更为强大,我们完全可以使用双引号来包含标准头文件,例如:

使用尖括号< >,编译器会到系统路径下查找头文件;而使用双引号" ",编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找。也就是说,使用双引号比使用尖括号多了一个查找路径,它的功能更为强大,我们完全可以使用双引号来包含标准头文件,例如:

那么,这里所说的“系统路径”和“当前路径”是什么意思呢?

绝对路径和相对路径

理论上讲,我们可以将头文件放在磁盘上的任意位置,只要带路径包含进来就可以。以 Windows 为例,在 D 盘下创建一个自定义的文件夹,名字为abc,它里面有一个头文件叫做xyz.h,那么在程序开头使用#include "D:\\abc\xyz.h"就能够引入该头文件。

现在不妨假设 xyz.h 中有一个宏定义和一个变量:

我们不鼓励在头文件中定义变量,否则多次引入后会出现重复定义错误,这里仅是一个演示案例,并不规范。

下面的代码会输出头文件中的宏和变量:?

运行结果:

C语言中文网已经 5 岁了!

绝对路径

D:\\abc\xyz.h这种从盘符开始、完整地描述文件位置的路径就是绝对路径(Absolute Path)。

绝对路径从文件系统的“根部”开始查找文件:
1) 在 Windows 下,根部就是 C、D、E 这样的盘符,例如D:\\a.hE:\images\123.jpgE:/videos/me.mp4D://abc/xyz.h等,分隔符可以是正斜杠/也可以是反斜杠\,盘符后面的斜杠可以有一个也可以有两个。

2) Linux 没有盘符,根部就是/,例如/home/xxx/abc.h/user/include/module.h等,分隔符只能是正斜杠/,比 Windows 简洁很多。

为了增强代码的可移植性,引入头文件时请尽量使用正斜杠/

相对路径

相对路径(relative path)是从当前目录(文件夹)开始查找文件;当前目录是指需要引入头文件的源文件所在的目录,这也是本文开头提到的“当前路径”

以 Windows 为例,假设在E:/cDemo/中有源文件 main.c 和头文件 xyz.h,那么在 main.c 中使用#include "./xyz.h"语句就可以引入 xyz.h,其中./表示当前目录,也即E:/cDemo/

如果将 xyz.h 移动到E:/cDemo/include/(main.c 所在目录的下级目录),那么包含语句就应该修改为#include "./include/xyz.h";对于 main.c 来说,此时的“当前目录”依然是E:/cDemo/

如果将 xyz.h 移动到E:/(main.c 所在目录的上级目录),那么包含语句就应该修改为#include "./../xyz.h",其中../表示上级目录。./../xyz.h的意思是,在当前目录的上级目录中查找 xyz.h 文件。

如果将 xyz.h 移动到E:/include目录,那么包含语句就应该修改为#include "./../include/xyz.h"

需要注意的是,我们可以将./省略,此时默认从当前目录开始查找,例如#include "xyz.h"#include "include/xyz.h"#include "../xyz.h"#include "../include/xyz.h"

上面介绍的相对路径的写法同样适用于 Linux,请大家亲自测试,这里不再赘述。

在实际开发中,我们都是将头文件放在当前工程目录下,非常建议大家使用相对路径,这样即使后来改变了工程所在目录,也无需修改包含语句,因为源文件的相对位置没有改变。

系统路径

在上节《C语言标准库以及标准头文件》中讲到,Windows 下的C语言标准库由 IDE 自己携带,Linux 下的C语言标准库一般在固定的路径下,总起来说,标准库不在工程目录下,要使用绝对路径才能引入头文件,这样每次切换平台或者 IDE 都要修改包含路径,非常不方便。

为了让头文件更加具有实践意义,Windows 下的 IDE 都可以为静态库和头文件设置默认目录。以 Visual Studio 为例,在当前工程名处单击鼠标右键,选择“属性”,在弹出的对话框中就可以看到已经设置好的路径,如下图所示:


这些已经设置好的路径就是本文开头提到的“系统路径”。

当使用相对路径的方式引入头文件时如果使用< >,那么“相对”的就是系统路径,也就是说,编译器会直接在这些系统路径下查找头文件;如果使用" ",那么首先“相对”的是当前路径,然后“相对”的才是系统路径,也就是说,编译器首先在当前路径下查找头文件,找不到的话才会继续在系统路径下查找。

而使用绝对路径的方式引入头文件时,< >和" "没有任何区别,因为头文件路径已经写死了(从根部开始查找),不需要“相对”任何路径。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:43:52  更:2022-03-06 12:45:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:38:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码