define分为无参宏定义和有参宏定义
一、无参宏定义
无参宏的宏名后不带参数。
其定义的一般格式为:
#define 标识符 字符串
# 表示预处理命令,凡是以 # 开头的均为预处理命令;
define 是宏定义关键字;
标识符 为所定义的宏名;
字符串 可以是常数、表达式、格式串;
程序中,常常使用 表达式 做为 字符串,如:
#include <iostream>
#define M (x + 2)
using namespace std;
int main()
{
int x = 1;
x = x * M;
cout << x << endl;
return 0;
}
在预处理时,代码中所有的宏名M将被替换成 (x + 2),输出的结果为:3;
关于无参宏定义还需要说明以下几点:
(1)字符串可以是任何字符,比如常量:
#define PI 3.1415926
(2)宏定义并不是语句,末尾不需要添加分号;
(3)宏定义不能在函数内,其作用域从宏命令到程序结束,如果想要提前结束,使用它可以提前结束:
#undef PI
(4)习惯上,宏名用大写的英文字母表示,不过写成小写是被允许的;
(5)可以使用宏定义表示数据类型
#include <iostream>
#define M struct MyStruct
#define INTEGER int
using namespace std;
M
{
INTEGER index;
};
int main()
{
M m;
m.index = 1;
cout << m.index << endl;
return 0;
}
使用 typedef 也可以表示数据类型,需要注意的是 define 和 typedef 的区别:
define 本质上是字符串的替换,如果使用 define 替换类型是一个比较危险的事情,然而 typedef 却没有这个风险。
二、带参宏定义
C++语言允许宏带有参数。
带参宏定义的一般形式为:
#define 宏名(形参表) 字符串
代码演示:
#include <iostream>
#define M(x) (x + 1)
#define Max(a, b) (a > b ? a : b)
using namespace std;
int main()
{
int k = M(2);
cout << k << endl;
int q = Max(2, 3);
cout << q << endl;
return 0;
}
[本章完...]
网友评论