C 宏 ## 不适用于函数定义
C macro ## doesn't work for function definition
#define FUNCXY(x,y) void FUNC_##x_##y(int){}
#define FUNCXYGOOD(x,y) void FUNCGOOD_##x##_##y(int){}
FUNCXY(2, 1) //get expanded to void FUNC_x_1(int){}
FUNCXYGOOD(2, 1) //get expanded to void FUNCGOOD_2_1(int){}
为什么 FUNCXY 不行,而 FUNCXYGOOD 可以,这就是这背后的 C 规则?
答案很简单。没有 x_
宏参数。下划线是宏标记的一部分。下划线与任何其他有效标记字符相同
否则像这样的宏是不可能的:
#define FOO(x, xa, xb)
#define FUNCXY(x,y) void FUNC_##x_##y(int){}
#define FUNCXYGOOD(x,y) void FUNCGOOD_##x##_##y(int){}
FUNCXY(2, 1) //get expanded to void FUNC_x_1(int){}
FUNCXYGOOD(2, 1) //get expanded to void FUNCGOOD_2_1(int){}
为什么 FUNCXY 不行,而 FUNCXYGOOD 可以,这就是这背后的 C 规则?
答案很简单。没有 x_
宏参数。下划线是宏标记的一部分。下划线与任何其他有效标记字符相同
否则像这样的宏是不可能的:
#define FOO(x, xa, xb)