Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;关于extern的Java转换问题;";_Java_C++_C - Fatal编程技术网

C++;关于extern的Java转换问题;";

C++;关于extern的Java转换问题;";,java,c++,c,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++代码转换成Java。我的C++是非常生锈的。 在
.h
文件中,我有以下内容:

#ifdef __cplusplus
extern "C" {
#endif

/* tons of declarations */

#ifdef __cplusplus
} /* extern C */
#endif
extern“C”
有什么用?这是什么意思?是否告诉编译器相应的代码应该被解释为纯C,而不是C++? 编辑

谢谢你迄今为止的回答。我必须转换的代码的历史是,它看起来像是用C写的一部分,然后剩下的部分用C++编写。因此,我的头文件似乎对应于“旧”C代码


我将把这段代码转换成一个带有静态方法和属性的
公共最终类
。无重写。

它告诉编译器函数签名应该与C兼容。C和C++中的名字处理不同(C++支持方法重载,C不支持),所以为了使某些函数调用(即一些动态链接库调用)与C签名兼容,在C++代码中使用<代码>外部C < /代码>。 .

外部“C”
用于表示C样式链接,而不是C++样式。C++编译器将类型信息添加到函数符号,但C编译器不添加。p> 如果您的库必须被外部应用程序使用,则代码>外部“C”<代码>是强制性的,因为C++编译器与类型信息基本不兼容。例如,当你必须在java中创建一个本机实现时,

Extn“c”表示C++链接风格而不是C++风格。它告诉编译器“请不要弄乱我的函数名”。它被用来使C++程序可以与C程序连接。如果您正在将某些东西转换为Java,那么忽略这一点可能是安全的。如果您试图将代码转换为C或C++,则此行将非常重要。