C语言——预处理

8 篇文章 0 订阅

一、预处理

1.预处理的定义
预处理是指在进行编译(词法扫描和语法分析)之前所作的工作。预处理是C语言区别于其他高级语言的特征之一, 它由预处理程序负责完成。当对一个源文件进行编译时, 系统自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译。

2.预处理的分类
1) 文件包含
2)宏定义
3)条件编译

3.预处理的作用
合理地使用预处理功能编写的程序便于阅读、修改、 移植和调试,也有利于模块化程序设计。

4.C语言的编译分为几个部分:
第一阶段:预处理: .c —> .i C语言文件
第二阶段:编译 .i -> .s 汇编语言
第三阶段:汇编 .s -> .o 可执行文件-机器语言
第四阶段:连接 .o -> 可执行程序

二、文件包含
1.文件包含的定义
文件包含就是在预处理阶段,将#include 包含的文件,替换成原有的文件的内容。可以实现文件分离,声明和实现相分离,是程序更加的模块化。

2.文件包含格式
1)#include //<>: 包含系统文件
2)#include “文件路径/filename” //“”: 包含自定义的文件

三、宏定义
1.什么是宏定义
宏定义就是用一个宏名代替一个字符串,以简化编程,提高程序的可读性。

2.基本的宏定义语法
#define 宏名 被替代字符串
示例:定义常量PI的宏 #define PI 3.141592

说明:
		1)# 表示是预处理指令,C语言里面凡是以#开头的,都是预处理指令
		2)宏名,一般使用大写,跟普通的变量区别;
		3)被替换的字符串,可以是常量、字符串、表达式
		4)  宏定义后面不要  +     ;

3.宏定义的本质
1)宏展开只是简单的字符串替换,不做正确性检测;
2)宏定义必须在函数外,宏的有效范围是从定义开始到文件的结尾,若想提前取消宏,则可以使用:(#undef 宏名 )取消宏

4.宏定义的作用
1) 程序会更易读
2)程序更易修改
3)可以帮助避免前后不一致或键盘输入错误
4)对数据类型重新命名
5)控制条件编译

5.带有参数的宏定义
#define 宏名(参数列表) 替换字符串
示例:计算两数最大值的宏
#define MAX(a, b) (a > b)? a : b

四、条件预编译
1.条件编译的定义
在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。

2.条件编译的作用
利用条件编译指令,可以产生不同的版本,对于程序调试,移植都是非常有用的。

3.条件编译的基本使用

 #if 条件1
  ...code1...
 #elif 条件2
 ...code2...
 #else
  ...code3...
 #endif

1> 如果条件1成立,那么编译器就会把#if 与 #elif之间的code1代码编译进去(注意:是编译进去,不是执行,很平时用的if-else是不一样的)
2> 如果条件1不成立、条件2成立,那么编译器就会把#elif 与 #else之间的code2代码编译进去

3> 如果条件1、2都不成立,那么编译器就会把#else 与 #endif之间的code3编译进去

4> 注意,条件编译结束后,要在最后面加一个#endif,不然后果很严重(自己思考一下后果)

5> #if 和 #elif后面的条件一般是判断宏定义而不是判断变量,因为条件编译是在编译之前做的判断,宏定义也是编译之前定义的,而变量是在运行时才产生的、才有使用的意义

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值