2.c语言编译预处理,c语言第03章-编译预处理2.ppt

c语言第03章-编译预处理2

第3章 编译预处理 编译预处理是指,编译时,首先对编译预处理命令进行处理,然后再将预处理后的中间结果进行编译,以得到目标代码。 教学目的: 掌握#define、#include的用法和用途; 了解条件编译的用途。 教学内容: 3.1* 宏定义与符号常量 3.2* 文件包含 3.3 条件编译 本章要点 本章作业与上机实践 3.1* 宏定义与符号常量 在进行文本编辑时,“替换”是一个很有用的功能。C语言编译预处理程序也提供类似的功能: 在源程序中,允许用一个标识符(称为宏名)来表示一个语言符号字符串;编译预处理时,用“语言符号字符串”替换所有“宏名”。 在C语言中,“宏”分为无参数的宏(简称无参宏)和有参数的宏(简称有参宏)两种。 3.1.1 无参宏 1.定义 #define 宏名 字符串 2.预处理操作——宏展开:用字符串替换所有宏名。 [案例3.1] 输入圆的半径,求圆的周长、面积和球的体积。要求:使用无参宏定义圆周率。 #define PI 3.1415926 #include “stdio.h” #include “conio.h” void main() { float radius, length, area, volume; printf("Input a radius: "); scanf("%f", &radius); length = 2* PI *radius; area = PI *radius*radius; volume = PI *radius*radius*radius*4/3; printf("length=%.2f,area=%.2f,volume=%.2f\n", length, area, volume); getch(); } 宏展开后的结果如下: …… void main() { …… length = 2* 3.1415926 *radius; area = 3.1415926 *radius*radius; volume = 3.1415926 *radius*radius*radius*4/3; …… } 3.使用宏定义的优点 (1)可提高源程序的可维护性。 在[案例3.1]中,如果圆周率只需要保留2位小数,则仅修改宏定义1处即可。 如果直接使用圆周率,而不是宏定义,则需要修改3处;且随着引用次数的增加而增加。 (2)可提高源程序的可移植性。 程序中有时需要使用一些与系统有关的常量,例如int型数据占用的内存字节数。 这时,可利用宏定义“#define INT_SIZE 16 ”将该内存字节数从程序中分离出来。 一旦需要移植到32位机上运行,只需将上述宏定义中的“16”改为“32”,然后重新编译、连接即可。 3.1.2 符号常量 在定义无参宏时,如果“字符串”是一个常量,则相应的“宏名”就是一个符号常量。 恰当命名的符号常量,除具有宏定义的一般优点外,还能表达出它所代表常量的实际含义,从而增强程序的可读性。 #define EOF -1 /*文件尾*/ #define NULL 0/*空指针*/ #define MIN 1 /*极小值*/ #define MAX 31 /*极大值*/ #define STEP 2 /*步长*/ 3.1.3 有参宏 1.定义:#define 宏名(形参表) 字符串 2.宏调用: 宏名(实参表) 3.宏展开:用实参字符串,直接置换形参字符串,非形参字符保持不变。 #define PI 3.1415926 #define LEN( r ) 2 * PI * r #define AREA( r ) PI * r * r #define VOLUME( r ) PI * r * r * r * 4/3 #include “stdio.h” #include “conio.h” void main() {…… length = LEN( radius ); area = AREA( radius ); volume = VOLUME( radius ); …… } 宏展开结果如下: …… length = 2 * 3.1415926 * radius; area = 3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值