#define用法:前加##或后加##,将标记作为一个合法的标识符的一部分,这句话什么意思?

来源:百度知道 编辑:UC知道 时间:2024/09/26 03:32:46
1) 前加##或后加##,将标记作为一个合法的标识符的一部分.注意,不是字符串.多用于多行的宏定义中.例如:
#define A(x) T_##x
则 int A(1) = 10; //等效于int T_1 = 10;
#define A(x) Tx##__
则 int A(1) = 10; //等效于int T1__ = 10;

这个是什么意思?

宏的单行定义
#define A(x) T_##x
#define B(x) #@x

#define C(x) #x
我们假设:x=1,则有:
A(1)------〉T_1
B(1)------〉'1'
C(1)------〉"1"

##代表“连接”
#@代表“转为字符”
#代表 “转为字符串”

define的多行定义
define可以替代多行的代码,例如MFC中的宏定义(非常的经典)

#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/* ... */ \
} while(0) /* (no trailing ; ) */
关键是要在每一个换行的时候加上一个"\"

就是相当于前面连接后面的字符串。建议百度一下DEFINE的##功能。