C语言中的‘##’的含义

来源:百度知道 编辑:UC知道 时间:2024/05/27 12:21:34
请教高手,下面一句话后半句 _##PER##_##REG##_##FIELD##_SHIFT 的含义。
#define _PER_FSHIFT(PER,REG,FIELD) \
_##PER##_##REG##_##FIELD##_SHIFT

拼接操作符(##)是二元的,被用来连接宏中两个实际参数,比如,如下宏定义
#define internal(var) internal##var
如果执行
long internal(str);
则被扩展为:
long internalstr;
在一般编程时很少用到拼接操作符,但在编写编译器程序或源代码生成器时特别有用,因为它能轻易的构造出一组标识符。

##表示把前后字符连接起来做标识符
#define _PER_FSHIFT(PER,REG,FIELD) \
_##PER##_##REG##_##FIELD##_SHIFT

后面在使用的时候比如_PER_FSHIFT(AA,BB,CC)
宏展开后就表示_AA_BB_CC_SHIFT

连接号

_PER_FSHIFT(11,22,33) 在程序中就是 _11_22_33_SHIFT