我编写了一个需要从 C 程序调用的 C++ 函数。为了使它可以从 C 中调用,我extern "C"
在函数声明中指定了。然后我编译了 C++ 代码,但是编译器 (Dignus Systems/C++) 为函数生成了一个错误的名称。所以,它显然没有兑现extern "C"
.
为了解决这个问题,我添加extern "C"
了函数定义。在此之后,编译器生成了一个可从 C 调用的函数名。
从技术上讲,extern "C"
唯一需要在函数声明中指定。这是正确的吗?(C++ FAQ有一个很好的例子。)你是否也应该在函数定义中指定它?
下面是一个例子来证明这一点:
/* ---------- */
/* "foo.h" */
/* ---------- */
#ifdef __cplusplus
extern "C" {
#endif
/* Function declaration */
void foo(int);
#ifdef __cplusplus
}
#endif
/* ---------- */
/* "foo.cpp" */
/* ---------- */
#include "foo.h"
/* Function definition */
extern "C" // <---- Is this needed?
void foo(int i) {
// do something...
}
我的问题可能是错误编码的结果,或者我可能发现了编译器错误。无论如何,我想咨询 stackoverflow 以确保我知道在技术上哪个是“正确”的方式。