#define的相关用途

#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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值