关于extern“C”的C ++到Java转换问题

时间:2011-06-30 21:04:59

标签: java c++ c

我必须将一些C / C ++代码转换为Java。我的C ++非常生疏。

.h文件中,我有以下内容:

#ifdef __cplusplus
extern "C" {
#endif

/* tons of declarations */

#ifdef __cplusplus
} /* extern C */
#endif

extern "C"有什么用?这是什么意思?它告诉编译器相应的代码应该被解释为纯C而不是C ++吗?

修改

感谢目前为止的答案。我必须转换的代码的历史是,它似乎首先用C语言编写,然后其余部分用C ++编写。所以我的头文件似乎对应于'旧的'C代码。

我将使用静态方法和属性将此代码转换为public final class。没有压倒一切。

3 个答案:

答案 0 :(得分:4)

它告诉编译器功能签名应该 C 兼容。名称修改在C和C ++中是不同的(即C ++支持方法重载而C不支持),因此为了使一些函数调用(即一些DLL动态调用)与C签名兼容,可以在C ++代码中使用extern C

Take a look at this StackOverflow question for a great explanation on the topic

答案 1 :(得分:4)

Extern "C"用于表示C风格的链接而不是C ++风格。 C ++编译器将类型信息添加到函数符号,但C编译器不添加。

如果您的库必须由外部应用程序使用,extern "C"是必需的,因为C ++编译器与类型信息大多不兼容。例如,当您必须使用Java创建本机实现时就是这种情况。

答案 2 :(得分:2)

Extern“C”表示C链接样式而不是C ++样式。它告诉编译器“请不要破坏我的函数名称”。它用于使C ++程序可以与C程序链接。如果要将某些东西转换为Java,那么忽略它可能是安全的。只有在尝试将代码转换为C或C ++时,此行才会很重要。