我必须将一些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
。没有压倒一切。
答案 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 ++时,此行才会很重要。