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))你错了。也许10年后你会同意。