我正在尝试延迟函数调用(使用函数包装器),方法是将其参数保存在一个空指针列表中:
void *args[]
int argt[]
使用argt是为了记住存储在void * location中的数据类型。
稍后,我需要调用被推迟的函数:
function(args[0], args[1])
但问题是我必须正确地指定它们的类型。
我使用宏,如下所示:
#define ARGTYPE(arg, type) type == CHARP ? (char *) arg : (type == LONGLONG ? *((long long *) arg) : NULL)
函数调用变成:
function(ARGTYPE(args[0], argt[0]), ARGTYPE(args[1], argt[1]))
我有两个问题:
1)警告:条件表达式中指针/整数类型不匹配,由宏定义生成(请注意,我可以接受,见2)
2)真正的问题: long long参数没有正确传递(我每次都得到0)
我显然遗漏了一些东西,所以有人能(详细地)解释一下为什么宏不能正常工作,或者建议另一种方法吗?
EDIT
:我在这里添加了存储参数部分(相关细节,我解析了一个va_list),它根据格式说明符获取它们的类型:
while (*format)
{
switch(*format)
{
case 's':
saved_arguments[i] = strdup(arg);
break;
case 'l':
saved_arguments[i] = malloc(sizeof(long long));
*((long long *) saved_arguments[i]) = arg;
break;
}
i++;
format++;
}
https://stackoverflow.com/questions/18082335
复制相似问题