C预处理器为生成的函数名定义
发布时间:2020-12-16 03:01:30 所属栏目:百科 来源:网络整理
导读:我有一个这样的情况,我有很多生成的函数,并希望指出一些我创建的通用函数(允许我在生成的函数名称改变时重用基本代码). 本质上,我有一个功能名称列表,如下所示: void Callback_SignalName1(void);void Callback_SignalName2(void);...etc 一旦这些生成,我想
我有一个这样的情况,我有很多生成的函数,并希望指出一些我创建的通用函数(允许我在生成的函数名称改变时重用基本代码).
本质上,我有一个功能名称列表,如下所示: void Callback_SignalName1(void); void Callback_SignalName2(void); ...etc 一旦这些生成,我想定义一个宏,以允许它们被一般调用.我的想法是这样的,但我没有运行实现它…因为C预处理器采用宏的名称,而不是宏被定义为: #define SIGNAL1 SignalName1 #define SIGNAL2 SignalName2 #define FUNCTION_NAME(signal) (void Callback_ ## signal ## (void)) ... ... FUNCTION_NAME(SIGNAL1) { .. return; } 问题是我收到的 void Callback_SIGNAL1(void) 代替 void Callback_SignalName1(void) 有没有一个很好的方法呢? 解决方法
您需要提供额外级别的“类似功能的宏”,以确保正确扩展:
例如 #define SIGNAL1 SignalName1 #define SIGNAL2 SignalName2 #define MAKE_FN_NAME(x) void Callback_ ## x (void) #define FUNCTION_NAME(signal) MAKE_FN_NAME(signal) FUNCTION_NAME(SIGNAL1) { return; } 输出: $gcc -E prepro.cc # 1 "prepro.cc" # 1 "<built-in>" # 1 "<command-line>" # 1 "prepro.cc" void Callback_SignalName1 (void) { return; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |