繁体   English   中英

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

[英]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.

查看这个 StackOverflow 问题,了解有关该主题的详细解释

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM