我用C语言编写的库和C ++中我自己的代码存在问题,问题似乎是有一个函数指针被声明为extern" C"但是指向一个C ++函数(在我的例子中,当我从库中调用函数时是NULL指针),它没有被声明为extern" C"。
现在代码:
function_from_lib( ... , (int (*)()) NULL);
在这里你可以看到我将函数指针传递给函数。问题是我需要一个函数指针,它也指向NULL但函数指向" NULL"点(愚蠢)应该声明为extern "C"
。有人知道如何解决这样的问题或解决方法吗?我不知道函数如何在内部查找,但它需要一个NULL函数指针来完成我的任务。
所以,如果我必须传递另外一个函数,如下所示:
extern "C" int fkt()
{
return NULL;
}
它会工作,但我需要一个NULL函数指针。
编辑:
这很有效:
extern "C" int fkt()
{
return NULL;
}
...
function_from_lib( ... , fkt);
这不会起作用:
int fkt()
{
return NULL;
}
...
function_from_lib( ... , fkt);
现在我需要传递一个NULL函数指针
function_from_lib( ... , (int (*)()) NULL);
并且它不起作用,因为它不是extern" C"
EDIT2(ERROR UPDATE)
ERROR:
argument of type "I32(*)()" is incompatible with parameter of type "I32(*)() C"
答案 0 :(得分:2)
也许可以使用typedef:s。 (我无法访问抱怨您的代码的编译器,所以我无法验证这一点)。例如:
extern "C"
{
typedef int (*my_fp_type)(void);
}
function_from_lib(... , (my_fp_type)0);