使用#define指令和#undef指令进行宏定义和终止宏定义
来源:互联网 发布:midi软件下载 编辑:程序博客网 时间:2024/06/05 22:53
使用#define指令进行宏定义
宏定义的功能是用一个标识符来表示字符串,标识符称为宏名。在预编译处理时,对程序中出现的宏名,在程序中出现的宏名,都用宏定义中出现的字符串去代替。
#define 指令的形式是: #define 宏名 宏定义内容
凡是在程序中遇到“宏名”预编译处理程序就用这个“宏定义内容”原封不动的替换宏名,进行编译。C语言中宏定义可分为无参宏定义和有参宏定义两种。
Ⅰ )无参宏定义
无参宏定义的一般形式为:#define 宏名 宏定义内容
例如:#define PI 3.14159
表示将PI定义为3.14159。在程序中,凡是遇到宏名PI ,都使用数值 3.14159原封不动的替换PI 进行编译。
需要注意的是:用引号括起来的宏名,预处理程序不对其进行宏替换。例如:
#include<stdio.h>#define Tom catint main(){ printf("Tom"); printf("\n"); return 0;}
程序运行时不会使用cat 去替换宏名Tom,编译器会将双引号中的Tom当作字符串处理,输出Tom。而如果在宏定义内容中出现引号,在编译时任然会原封不动的进行替换。例如:
#include<stdio.h>#define Tom "cat"int main(){ printf("%s",Tom); printf("\n"); return 0;}
程序执行时遇到宏名Tom则会用宏定义内容“cat”进行替换输出cat 。
Ⅱ)有参宏定义
宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏定义,在定义时不仅要宏展开,而且要用实参来代替形参。代参宏定义的一般形式为:
#define 宏名(形参表) 宏定义内容
代参宏调用的一般形式为:宏名(实参表);
例如:#define L(x) (x*x+2*x+x)
宏调用: y = L(5);在宏调用时,用实参5 去代替形参x,经预处理宏展开后的语句是:y =(5*5 + 2*5 +5) ;
使用宏定义时要注意以下几点;
(1)通常宏名都用大写字母表示,以便与程序中的变量相区别。从语法上来讲,不管是大写或小写,只要是合法的标识符都可以。
(2)通常将宏定义放在源程序文件开头。
(3)在宏展开时,只是原封不动的用宏定义内容替换宏名,别的什么计算、语法,编译预处理都不管。
(4)当宏名出现在字符串中时,预编译处理不对宏名进行宏展开,而是当作字符串处理。
使用#undef 终止宏定义####
#undef指令又叫终止宏指令,若要终止宏的作用域,可使用终止宏指令。#undef指令的一般形式是:
#undef 宏名
例如:
#define PI 3.14159 . . .#undef PI
#undef PI终止了PI 的作用域。若没有设置终止宏指令,则宏名的作用域是从宏定义开始到源文件结束为止。
下面看一个简单的例子:
#include<iostream>using namespace std;#define PI 3.14159 //宏定义#define AREA "圆面积为:"int main(){ float area1, area2; int radius; cout << "请输入圆半径: "; cin >> radius; area1 = PI *radius*radius; #undef PI //终止宏定义 float pi = 3.14; area2 = pi*radius*radius; cout << AREA <<"area1="<< area1 << endl << AREA <<"area2="<< area2 << endl; return 0;}
运行结果:
在程序源文件开头进行宏定义:#define PI 3.14159在程序计算面积area1 后,终止了PI的宏定义。从新定义了float型变量PI,计算area2时使用了相同的变量名PI,程序运行结果并不相同,这是因为计算area1是使用的变量PI的值为宏定义的值3.14159,而计算area2时使用的是后来定义的float型变量值为3.14。这个例子可以帮我们简单理解宏定义和终止宏定义。
- 使用#define指令和#undef指令进行宏定义和终止宏定义
- 预处理指令和简单的宏定义
- #define 与 #undef 指令配套使用
- 编译预处理--#include包含指令, #define宏定义指令, #if条件编译指令
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令
- C/C++编译预处理:宏定义指令、文件包含指令、条件编译指令和特殊符号处理
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令
- 宏定义来实现条件编译(#define #undef #ifdef)
- #define宏定义和const
- define进行宏定义,#,#@,##的使用
- 使用宏定义DEFINE
- 预处理指令 宏定义 条件编译指令 static和extern关键字
- 宏定义#ifndef和#define,#endif的使用分析
- 预处理指令_宏定义
- 程序猿之---C语言细节31(#define和#undef宏细节、#error、#pragma message("文本信息")、宏定义注释)
- C语言中利用#define和#undef定义初始化数组,实现不同的初始化效果
- #define宏定义的优点和缺点
- 正式走向程序人生
- 【C++ Primer Plus总结】第二章——开始学习C++
- 开博感言以及渣硕的不定期更新的人生感想
- javaBean构造器
- 《Android》Android Studio打开项目卡死
- 使用#define指令和#undef指令进行宏定义和终止宏定义
- 视频监控安防平台-GB28181-系统目录查询TCP协议和系统录像文件检索TCP协议
- TabLayout与ViewPage联用
- 每天一道算法题——调整数组顺序使奇数位于偶数前面
- Java:一个帝国的诞生
- Java类、对象和实例的理解
- mysql命令大全
- 条件随机场
- git review