【预处理与头文件】#include<stdio.h>到底是什么东西

前言

刚学习c语言时,老师总是叫我们在第一行打上#include<stdio.h>,并称之为预处理,预处理是什么意思?这里的#、include、stdio.h又分别是什么意思呢?还有一定要用<>将stdio.h包裹起来吗," "是否也可以?

①预处理:
  1. #是预处理指令,C语言编译系统在对C程序进行正式编译之前需做一些预处理工作;
  2. include是包含的意思;
  3. #include<XX> 是文件包含命令,意为将尖括号<>内的文件XX包含到本程序中,称为本程序的一部分

换句话说,你可以理解为将<>内的文件XX中的代码通过复制和粘贴,移动到了本程序

stdio.h全程为standard input output.header,也就是“标准输入、输出"头文件,这个文件的内容就是基本输入输出函数的声明,比如scanf()和printf()。

这里的scanf和printf,我们称其为库函数

库函数(Library function)是把函数放到库里,供别人使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。一般放在.lib文件中

所以,若要在程序中调用一个库函数,包含该函数原型的头文件就必须要有,一般是写在程序开头。

例如:我们要在函数里使用printf这个库函数,就要在代码开头写上#include<stdio.h>,因为库函数printf在头文件stdio.h里

#include <math.h> 是包含math头文件的意思, .h是头文件的扩展名(header file),这一句声明了本程序要用到标准库中的 math.h文件。math.h头文件中声明了常用的一些数学运算,比如乘方,开方运算等等。

每条#include语句只能包含一个头文件。如果有多个头文件,就得分别写多个#include语句,每行一条#include只语句,每条#include语句也只包含一个头文件。

②头文件:
1.什么是头文件

头文件:后缀为.h的文件(.header)

例如:

#include<stdio.h>
#include<math.h>
#include<conio.h>

形如#include<…>

尝试在vs2022安装目录中搜索stdio.h
请添加图片描述打开
请添加图片描述搜索printf
请添加图片描述由此可知stdio.h文件中,写入了printf

#####2.头文件的作用是什么?

可以这么打个比方:

编译器好比是你的管家,负责家(程序)的安全,一经发现任何可疑的人员都禁止进屋!而printf就这么被抓住了!你既然想让它进屋,能做的,就是提前告诉管家我要让它进来,也就是提前声明。可时间一长,你发现有很多这样的人想让进来,每次都一个个声明太累了,索性就建立一个白名单,把想让进屋的人都写进去,都声明起来,到时候让管家看白名单得了!于是乎,就有了头文件的样子,也就是包含头文件。#include<stdio.h>这句话。

但凡想用到谁,就包含含有谁的头文件。

比如你用printf函数打印东西,那你就要包含stdio.h的头文件

如果你用pow函数算多立方,那你就要包含math.h的头文件

如果你要用strcmp函数接收一个字符,那你就要包含string.h的头文件

3.头文件如何被包含

#include的预处理命令所谓预处理,即可以在编译器编译之前,做一些预先要做的准备工作,比如宏替换、展开等等,而包含头文件其实也就是把头文件里的内容原封不动的放到程序的最前面,仅此而已!

(补充)③include使用引号“”和尖括号<>的区别?

1.#include <xxx.h>

系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。

2.#include “xxx.h”

用户自定义的头文件用双引号括起来,编译器首先会在用户目录下查找,然后再到 C++ 的安装目录(Linux 中可以通过环境变量来设定)中查找,最后在系统文件中查找。

这两种写法都是正确的写法,但它们却是有区别的。我们知道 C/C++ 已经有一些编写好的头文件(比如标准函数库等)。当我们使用 #include <XXX> 命令时,编译器就到系统文件夹里去找对应的头文件。

显然,用这种写法去寻找一个我们自己编写的头文件就会出错,因为我们自己写的头文件一般情况下并不在系统文件夹里。所以包含 C++ 提供的头文件时,应该使用尖括号。

相反地,#include "XXX.h" 命令则是先在当前文件所在的目录搜索是否有符合的文件,如果没有再到系统文件夹里去找对应的头文件。因此,无论这个文件是 C++ 提供的还是自己编写的,使用#include "XXX.h"命令一定是正确的。

参考文献

[1] 李桥桉.c语言编程 开头的#include <stdio.h>是什么意思?[EB/OL].2020:[2024].https://blog.csdn.net/wodegeCSDN/article/details/110109584.
[2] CTO.三问C语言头文件:什么是头文件?头文件作用是什么?如何包含头文件?[EB/OL].2016:[2024].https://www.dotcpp.com/wp/374.html.
[3] helloLT.#include使用引号“”和尖括号<>的区别?[EB/OL].2020:[2024].https://zhuanlan.zhihu.com/p/161049759.

  • 39
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔倾晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值