如何用宏实现传入参数生成指定格式的函数调用代码?
用宏简化函数调用实现方案
完全可以通过C预处理宏实现这个需求,核心是利用**令牌粘贴(Token Pasting)**操作符##来拼接函数名。
宏定义写法
#define foo(Thing) StartingFunctionName##Thing##Callback(&Thing)
工作原理
##操作符的作用是在预处理阶段把相邻的两个令牌(Token)拼接成一个新的令牌。- 当你调用
foo(MyFunction);时,预处理器会自动把StartingFunctionName、MyFunction、Callback这三个令牌拼接成StartingFunctionNameMyFunctionCallback,同时把参数&MyFunction传入,最终展开为:
完全符合你需要的原始调用格式。StartingFunctionNameMyFunctionCallback(&MyFunction);
注意事项
- 这个写法是标准C的特性,只要你的编译器遵循C标准(比如C99、C11等),都能正常工作。
- 传入的
Thing必须是合法的标识符(比如函数名),不能包含空格或特殊字符,否则令牌拼接会出错。
内容的提问来源于stack exchange,提问作者Guelque Hadrien
相关产品推荐
相关产品推荐

