如何实现C宏参数插值:为函数名添加前缀并调用
解决C宏参数与前缀拼接问题
你当前的宏定义里,__some_function_name_prefix__name会被预处理器视为一个单独的标识符,不会将参数name替换为传入的实际值。要实现令牌拼接,需要使用C预处理器的令牌粘贴运算符##。
修正后的宏定义如下:
#define FUNC(name) __some_function_name_prefix__##name()
此时调用宏的展开效果完全符合预期:
FUNC(add) // => __some_function_name_prefix__add() FUNC(subtract) // => __some_function_name_prefix__subtract() FUNC(multiply) // => __some_function_name_prefix__multiply() FUNC(divide) // => __some_function_name_prefix__divide()
##运算符的作用是将左右两侧的预处理器令牌合并为一个新的令牌。在这里,它会把前缀__some_function_name_prefix__和传入的参数(比如add)拼接成完整的函数名,再加上括号形成函数调用。
内容的提问来源于stack exchange,提问作者Michael M.
相关产品推荐
相关产品推荐

