#define的相关用途
#include "stdafx.h"
#include <iostream>
using namespace std;
#if 0
1.#define 定义数值宏常量
#define PI 3.1415926
2.#define 定义字符串宏常量 如相关路径
#define PATH "E:\\work\\list\\code\\a.out"
路径中\切记要写成\\,如果路径太长可以分行来写并用\进行连接
#define PATH "E:\\work\\list" \
"\\code" \
"\\a.out"
3.#define不能定义注释符号
#define A //
//#define B /*
//#define C */
因为注释先于预处理指令被处理,在预处理指令替换前,注释已经处理完毕
4.#define定义宏函数
#define SQR(x) ((x)*(x)) 多加括号,避免替换后运算符优先级出现问题
注意定义时的空格问题 SQR与(x)之间不能有空格
但使用的时候可以有空格 SQR (5)与SQR(5) 相同
得到指定地址上的一个字节、字
#define MEM_B(x) (*( (byte*) (x) ) )
#define MEM_w(x) (*( (word*) (x) ) )
5.相关应用
(1)
定义函数体
#define FUNC(n) \
int Func##n(int a, int b)\
{\
return a+b;\
}
实现每一个函数体
将产生函数名为Func0、Func1、Func2的函数体
FUNC(0)
FUNC(1)
FUNC(2)
...
...
使用函数指针数组引用这些函数
int(*fnFunc[2])(int, int) =
{
Func0,
Func1,
Func2,
...
}
int main()
{
//访问方式1
int x = Func0(24, 15);
//访问方式2
for (int i = 0; i<3; i++)
{
int y = fnFunc[i](12, 88);
}
}
(2)定义类中相关成员(属性读取器)
#define CC_SYNTHESIZE(varType,varName,funName) \
protected: vcarType varName;\
public: varType get##funName(void) const {return varName;}\
public: void set##funName(varType var) {varName=var;}
//其他类定义中使用
class Config
{
CC_SYNTHESIZE(int, m_IsRobot, IsRobot);
...;
...;
};
#endif