|
【实训目的】学习简单的宏定义
【第 1 步】实训内容介绍
实训内容:学习简单的宏定义。
前置条件:无
实训过程:
1. 实训内容介绍
2. 简单的宏定义
3. 嵌套的宏定义
4. 宏定义与字符串
5. 出错的检查
6. 实训结束
【Jitor 校验第 1 步】我已阅读实训内容介绍 // 送分题。直接点击。
【第 2 步】简单的宏定义
1、在项目 cpp6 中创建名为 cpp6_2 的源代码文件,如果项目不存在,则先创建项目,然后创建源代码文件。
2、将下述代码复制到刚刚创建的 cpp6_2 中:
#include <iostream.h>
#define PI 3.1415926 // 宏定义,结尾不能加分号,可以加注释
void main(void) {
double pi = 3.1415926; // 这是变量,名称小写(宏名用大写)
double r;
cout << "PI = {" << PI << "}\n"; // 在预处理时用 3.1415926 替换 PI
cout << "pi = {" << pi << "}\n"; // 在运行时输出变量 pi 的值
}
直接运行,运行结果如下(阅读代码中的注释,理解宏定义与变量的区别):
PI = {3.14159}
pi = {3.14159}
Press any key to continue
代码如下:
// 从下一行开始复制。
#include <iostream.h>
#define PI 3.1415926 // 宏定义,结尾不能加分号,可以加注释
void main(void) {
double pi = 3.1415926; // 这是变量,名称小写(宏名用大写)
double r;
cout << "PI = {" << PI << "}\n"; // 在预处理时用 3.1415926 替换 PI
cout << "pi = {" << pi << "}\n"; // 在运行时输出变量 pi 的值
}
// 一直复制到上一行结束。
【Jitor 校验第 2 步】 // 复制上面的代码到 VC++ 6.0 ,保存并运行。点击。
【第 3 步】嵌套的宏定义
改写前一步骤的代码,编写一个名为 AREA 的嵌套宏,然后在主函数中使用这个宏,代码见█████
运行结果如下:
PI = {3.14159}
pi = {3.14159}
输入圆的半径: 22
圆的面积是: {1520.53}
Press any key to continue
代码如下:
// 从下一行开始复制。
#include <iostream.h>
#define PI 3.1415926 // 宏定义,结尾不能加分号,可以加注释
#define AREA PI*r*r
void main(void) {
double pi = 3.1415926; // 这是变量,名称小写(宏名用大写)
double r;
cout << "PI = {" << PI << "}\n"; // 在预处理时用 3.1415926 替换 PI
cout << "pi = {" << pi << "}\n"; // 在运行时输出变量 pi 的值
cout << "输入圆的半径: ";
cin >> r;
cout << "圆的面积是: {" << AREA << "}\n";
}
// 一直复制到上一行结束。
【Jitor 校验第 3 步】 // 复制上面的代码到 VC++ 6.0 ,保存并运行。点击。
【第 4 步】宏定义与字符串
添加一个含义为字符串的宏定义,然后使用它,代码见█████
运行结果如下:
PI = {3.14159}
pi = {3.14159}
输入圆的半径: 22
圆的面积是: {1520.53}
圆的面积是: {1520.53}
Press any key to continue
代码如下:
// 从下一行开始复制。
#include <iostream.h>
#define PI 3.1415926 // 宏定义,结尾不能加分号,可以加注释
#define AREA PI*r*r
#define PROMPT "圆的面积是: {"
void main(void) {
double pi = 3.1415926; // 这是变量,名称小写(宏名用大写)
double r;
cout << "PI = {" << PI << "}\n"; // 在预处理时用 3.1415926 替换 PI
cout << "pi = {" << pi << "}\n"; // 在运行时输出变量 pi 的值
cout << "输入圆的半径: ";
cin >> r;
cout << "圆的面积是: {" << AREA << "}\n";
cout << PROMPT << AREA << "}\n";
}
// 一直复制到上一行结束。
【Jitor 校验第 4 步】 // 复制上面的代码到 VC++ 6.0 ,保存并运行。点击。
【第 5 步】出错的检查
再添加一个宏定义,以及对宏定义的引用,代码见█████
这时出现错误信息如下:
Compiling...
cpp6_2.cpp
D:\VC60\cpp6\cpp6_2.cpp(24) : error C2100: illegal indirection
Error executing cl.exe.
cpp6.exe - 1 error(s), 0 warning(s)
注意:出错信息中指出的行号是不宏定义,而是引用宏定义的行。
代码如下:
// 从下一行开始复制。
#include <iostream.h>
#define PI 3.1415926 // 宏定义,结尾不能加分号,可以加注释
#define AREA PI*r*r
#define PROMPT "圆的面积是: {"
#define PERIMETER 2+*PI*r
void main(void) {
double pi = 3.1415926; // 这是变量,名称小写(宏名用大写)
double r;
cout << "PI = {" << PI << "}\n"; // 在预处理时用 3.1415926 替换 PI
cout << "pi = {" << pi << "}\n"; // 在运行时输出变量 pi 的值
cout << "输入圆的半径: ";
cin >> r;
cout << "圆的面积是: {" << AREA << "}\n";
cout << PROMPT << AREA << "}\n";
cout<<"圆的周长是:{"<<PERIMETER<<"}\n";
}
// 一直复制到上一行结束。
【Jitor 校验第 5 步】 // 复制上面的代码到 VC++ 6.0 ,保存并运行。点击。
【第 6 步】实训总结
本次实训学习了宏定义。总结如下:
1. 替换过程将会自动识别代码和代码中的字符串,对于代码中的字符串不作替换。
2. 宏可以嵌套,即在宏中引用另外一个宏定义
3. 如果宏义中的内容是一个字符串(用引号括起来),则替换为字符串
4. 语法检查时,对宏本身不作检查,只是对替换后的结果作语法检查
【Jitor 校验第 6 步】我已阅读实训总结 // 送分题。直接点击。
仍有疑问 ? 联系QQ 9429444(陈海云) : 返回首页 |