定义宏时"##x"是什么意思
What does "##x" mean while defining a macro
我正在处理一些旧代码;其中有一个宏定义如下:
class SymbolToAdd
{
public:
SymbolToAdd(char *symbolName, FUNCPTR funcPtr);
SymbolToAdd(char *funcName,
char *funcHelp,
FUNCPTR funcPtr); // Add function with help string
};
#define SANB_OS_REG_FUNC(funcName) static SymbolToAdd funcName##x(#funcName, (FUNCPTR)funcName);
int some_func()
{
//some operations
...
}SANB_OS_REG_FUNC(SANB_OS_REG_FUNC);
谁能告诉我funcName##x
是什么意思?
它是一个串联运算符。它将左侧部分与右侧部分相加。
例:
#define M(a, b) a ## b
如果像这样使用
printf("%dn", M(1, 2));
然后宏将被 1
和 2
的串联所取代(即 12
(:
printf("%dn", 12);
##(双数字符号(运算符在宏定义中给出的宏调用(文本和/或参数(中连接两个标记。
如果宏 XY 是使用以下指令定义的:
#define XY(x,y) x##y
X 参数的最后一个标记与 Y 参数的第一个标记连接。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思