【实训6-2】不带参数的宏定义
(总分32)


 【实训目的】学习简单的宏定义
  
【第 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(陈海云) : 返回首页