[英]C++ to Java conversion question about extern “C”
我必须将一些 C/C++ 代码转换为 Java。 我的 C++ 非常生锈。
在.h
文件中,我有以下内容:
#ifdef __cplusplus
extern "C" {
#endif
/* tons of declarations */
#ifdef __cplusplus
} /* extern C */
#endif
extern "C"
有什么用? 这是什么意思? 它是否告诉编译器相应的代码应该被解释为纯 C,而不是 C++?
编辑
感谢您到目前为止的答案。 我必须转换的代码的历史是,它似乎首先是用 C 编写的,然后 rest 是用 C++ 编写的。 所以我的 header 文件似乎对应于“旧” C 代码。
我将使用 static 方法和属性将此代码转换为public final class
。 没有压倒一切。
它告诉编译器 function 签名应该与C兼容。 Name mangling are different in C and C++ (ie C++ supports method overloading while C does not) so in order to make some function calls (ie some DLL dynamic calls) compatible with C signature, you use extern C
in C++ code.
Extern "C"
用于指示 C 样式链接而不是 C++ 样式。 C++ 编译器将类型信息添加到 function 符号,但 C 编译器不会。
如果您的库必须由外部应用程序使用,则extern "C"
是强制性的,因为 C++ 编译器在类型信息方面大多不兼容。 例如,当您必须在 Java 中创建本机实现时,就是这种情况。
外部“C”表示 C 链接样式,而不是 C++ 样式。 它告诉编译器“请不要破坏我的 function 名称”。 它用于 C++ 程序可以与 C 程序链接。 如果您要将某些内容转换为 Java,则可以忽略这一点。 仅当您尝试将代码转换为 C 或 C++ 时,此行才重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.