,c,function,pointers,extern,C,Function,Pointers,Extern" /> ,c,function,pointers,extern,C,Function,Pointers,Extern" />

“外部”;";空函数指针 我有一个问题,用C语言编写的,我自己的代码在C++中,问题似乎是函数指针被声明为外部的“C”,但是指向C++函数(在我的例子中,当我从LabBee调用函数时,空指针),它没有被声明为外部的“C”。p>

“外部”;";空函数指针 我有一个问题,用C语言编写的,我自己的代码在C++中,问题似乎是函数指针被声明为外部的“C”,但是指向C++函数(在我的例子中,当我从LabBee调用函数时,空指针),它没有被声明为外部的“C”。p>,c,function,pointers,extern,C,Function,Pointers,Extern,现在代码为: function_from_lib( ... , (int (*)()) NULL); 在这里,您可以看到我将functionpointer传递给函数。问题是我需要一个函数指针,它也指向NULL,但是“NULL”指向的函数(愚蠢)应该声明为extern“C”。有人知道如何解决这样的问题或解决方法吗?我不知道函数内部是什么样子,但它需要一个空函数指针来完成我的任务 因此,如果我必须传递另一个函数,如下所示: extern "C" int fkt() { return NULL;

现在代码为:

function_from_lib( ... , (int (*)()) NULL);
在这里,您可以看到我将functionpointer传递给函数。问题是我需要一个函数指针,它也指向NULL,但是“NULL”指向的函数(愚蠢)应该声明为
extern“C”
。有人知道如何解决这样的问题或解决方法吗?我不知道函数内部是什么样子,但它需要一个空函数指针来完成我的任务

因此,如果我必须传递另一个函数,如下所示:

extern "C" int fkt()
{ 
return NULL;
} 
它本来可以工作,但我需要一个空函数指针

编辑:

好吧,这是有效的:

extern "C" int fkt()
{ 
return NULL;
} 
...

function_from_lib( ... , fkt);
这是行不通的:

int fkt()
{ 
return NULL;
} 
...

function_from_lib( ... , fkt);
现在我需要传递一个空函数指针

function_from_lib( ... , (int (*)()) NULL);
它不起作用,因为它不是外部的“C”

EDIT2(错误更新)


可以使用typedef:s。(我无法访问抱怨您的代码的编译器,因此无法验证这一点)。例如:

extern "C"
{
  typedef int (*my_fp_type)(void);
}

function_from_lib(... , (my_fp_type)0);

请添加一个更完整的代码示例,即您尝试过但不起作用的IRC,
extern“C”
仅防止函数名被损坏(C++这样做是为了允许函数重载)。它不会对函数指针产生任何影响。你得到的实际错误是什么?现在我希望它有点更清楚。“C++”标准允许环境对C和C++函数有不同的调用约定。在这样的环境中,您不能简单地将一个函数指针强制转换为另一个函数指针并期望它工作。我在这里找到了对该问题的非常深入的讨论:。所以是的,我错了,对不起:)Lindydancer的答案看起来不错,但你已经试过了吗<代码>函数库中的函数(…,(外部“C”int(*)()NULL)。。。看起来它能起作用。
extern "C"
{
  typedef int (*my_fp_type)(void);
}

function_from_lib(... , (my_fp_type)0);