C/C++;预处理器-组合替换

C/C++;预处理器-组合替换,c,macros,c-preprocessor,C,Macros,C Preprocessor,我有不同版本的基函数void*\u function():void*\u function\u standard(),*\u function\u secure(),*\u function\u fast() 我想定义宏接口,以便能够选择要调用的函数以及对返回值执行的操作,例如,强制转换、调用函数\u TYPE\u MODE(),而无需冗余地定义每个选项 我想避免的是: #define F_CHAR (unsigned char *) _function_sta

我有不同版本的基函数
void*\u function()
void*\u function\u standard()
*\u function\u secure()
*\u function\u fast()
我想定义宏接口,以便能够选择要调用的函数以及对返回值执行的操作,例如,强制转换、调用
函数\u TYPE\u MODE()
,而无需冗余地定义每个选项

我想避免的是:

#define F_CHAR           (unsigned char *)        _function_standard()
#define F_CHAR_FAST      (unsigned char *)        _function_fast()
#define F_CHAR_SECURE    (unsigned char *)        _function_secure()
#define F_SCHAR          (signed char *)          _function_standard()
#define F_SCHAR_FAST     (signed char *)          _function_fast()
#define F_SCHAR_SECURE   (signed char *)          _function_secure()
#define F_CHARPNT        (unsigned char **)       _function_standard()
#define F_CHARPNT_FAST   (unsigned char **)       _function_fast()
#define F_CHARPNT_SECURE (unsigned char **)       _function_secure()
#define F_SHORT          (unsigned short int *)   _function_standard()
#define F_SHORT_FAST     (unsigned short int *)   _function_fast()
#define F_SHORT_SECURE   (unsigned short int *)   _function_secure()
#define F_INT            (unsigned int *)         _function_standard()
#define F_INT_FAST       (unsigned int *)         _function_fast()
#define F_INT_SECURE     (unsigned int *)         _function_secure()
如果我必须处理大量不同类型的数据和超过2/3的模式(标准、安全、快速),这可能是一个问题

相反,我需要的是定义宏,让我在函数类型模式下调用函数,只定义一次corresponces\u FAST->\u function\u FAST(),\u SECURE->\u function\u SECURE()和类型之间的错误

F_SHORT()       -> (unsigned short int *)  _function_standard()
F_SHORT_FAST()  -> (unsigned short int *)  _function_fast()
F_CHAR_SECURE() -> (unsigned char *)       _function_secure()
...
我想定义
DEFAULT\u TYPE
DEFAULT\u MODE
,这样我就可以为
(默认类型)\u function/?fast()
调用
F()

我读到:,但我还不明白如何使用
FUNC\u TYPE\u模式
表单而不是
FUNC(TYPE,MODE)
one


建议?:-)

注意:以两个下划线开头的名称保留用于实现。不要在用户代码中使用它们!你的问题不清楚。你确定你自己知道你想做什么吗?你的实际问题是什么?C和C++是不同的语言。如果您选择其中一个,可能会有更好的解决方案。您可以通过将标记与宏中的
##
粘贴在一起来创建新标记,但不能解析宏名称。换句话说,无法通过预处理器获取
F_SHORT
中的
SHORT
部分。(而且
F_CHAR*\u FAST
无论如何都不是有效的宏名称。)不需要强制转换
void*
来分配给不同类型的指针。e、 g.
intx=malloc(sizeof(int))是正常/首选模式,而不是
intx=(int*)malloc(sizeof(int))