【初学者入门C语言】之编译预处理(十)
个人主页:天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主
💬 刷题网站:一款立志于C语言的题库网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com)
特别标注:该博主将长期更新c语言内容,初学c语言的友友们,订阅我的《初学者入门C语言》专栏,关注博主不迷路!
目录
前言
文件包含
#include
两种格式
#include<头文件名称>
#include"头文件名称"
头文件包含的顺序
宏定义
宏
嵌套宏
举例
有参数的宏定义
格式
举例
易错点
总结
前言
预编译伪指令一般都以#打头,且前面不能有其他字符,只能出现空白字符,执行过程是C的编译处理器对预编译伪指令进行处理后生成中间文件作为编译器的输入,因此所有的预编译伪指令都不会进入编译阶段。
文件包含
#include
#include伪指令用于包含一个头文件,头文件中存放的一般是模块接口,编译预处理器在扫描到伪指令后就用对应的文本内容替换它。
两种格式
#include<头文件名称>
一般用于包含的是库头文件,指示编译预处理器在开发环境设定的搜素路径中查找所需要的头文件
#include"头文件名称"
一般用来包含自己编写的头文件。
头文件包含的顺序
1.当前所需的自定义头文件
2.第三方程序库的头文件
3.标准头文件
宏定义
宏
宏定义相当于自己定义一个常量,宏定义具有文件作用域,宏定义晚后,后面任意一个地方都可以引用宏。
宏定义不是C语句,所以不需要使用语句结束符“;”
格式:
#define 宏名 宏体
举例
#define PI 3.14
为了便于区分,宏名为大写字母
嵌套宏
先完成一个宏定义,在第二个宏定义的宏体中包含了第一次宏定义的宏名
举例
#define PI 3.14
#define PI_2 (2*PI)
代码
#include <stdio.h>
#define PI 3.14
#define PI_2 2*PI
int main() {
int r = 3;
float l;
l = PI_2 * r;
printf("%.2f", l);
return 0;
}
执行结果
有参数的宏定义
与函数类似,宏定义中的参数称为形式参数
格式
#define 宏名(形参表) 宏体
举例
#define F(x,y) 2*x+y
代码
#include <stdio.h>
#define F(x,y) 2*x+y
int main() {
int x = 2;
int y = 3;
int z = F(x, y);
printf("%d", z);
return 0;
}
执行结果
注意宏定义宏体是否加括号的运算结果是不同的 ,举例如下:
易错点
1.#define F (x*x+3*x)
代码
#include <stdio.h>
#define F (x*x+3*x)
int main() {
int x = 2;
int z = 3 * F + 4;
printf("%d", z);
return 0;
}
运行结果
带括号的执行的时候是3*(x*x+3*x)+4即3*(2*2+3*2)+4也就是34
2.#define F x*x+3*x
代码
#include <stdio.h>
#define F x*x+3*x
int main() {
int x = 2;
int z = 3 * F + 4;
printf("%d", z);
return 0;
}
执行结果
不带括号的执行的时候是3*x*x+3*x+4即3*2*2+3*2+4也就是22
由上面两个例子可以看出宏定义到括号和不带括号是完全不一样的,这点十分容易错,大家一定要小心
总结
理解包含头文件,清楚头文件的两种格式,掌握宏定义及其嵌套,能够区分宏定义带括号和不带括号的区别。
各位C语言的初学者有问题随时都可以问我,随时为您解惑!!!
👍+✏️+⭐️是对博主最大的鼓励与支持!!!