java - Swig - 为什么我们需要声明函数两次?

标签 java c swig

我想使用 swig 从 Java 调用 C 函数。 我读: SWIG Tutorial

Web 包含接口(interface)文件示例:

/* example.i */
 %module example
 %{
 /* Put header files here or function declarations like below */
 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();
 %}

 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();

为什么函数声明有重复? (例如“extern int fact(int n);”在 {% %} 和文件底部声明?

最佳答案

%{ %} block 中的内容被精确复制到生成的 c 文件 (example_wrap.c) 中,用作正向原型(prototype)。 block 外的东西用于生成生成的 .c 文件内的函数。

一个更好的例子假设你已经有一个像 example.h 这样的头文件:

extern void functionIwantToCallFromJava(int);
extern crazyType *functionIDoNotCareAbout(anotherCrazyType *);

所以在 example.i 里面你有

%{ 
#include "example.h"
%}
extern void functionIwantToCallFromJava(int);

现在生成的文件将在开头附近有 #include "example.h",它需要这样 functionIwantToCallFromJava 才能正确原型(prototype)化, 但是 SWIG 不必生成大量代码来实现 functionIDoNotCareAbout,即使它是在同一个头文件中定义的。

关于java - Swig - 为什么我们需要声明函数两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32208350/

相关文章:

java - 发件人地址不正确

java - Android 的信令服务器的实现,它将使用 java 的 webRTC

c - 段错误、指针问题?

c++ - 如何使用 SWIG 枚举枚举成员

python - 使用 swig 模块时出现类型错误 : in method '...' , 类型 'unsigned char const *' 的参数 1

java - 无法将 Simple Spring MVC 项目部署到 AWS Tomcat 8

java - 如何使用java在Excel中导入文本文件?

c - 在用户输入旁边打印输出

c - 为什么 gdb 看不到 `stdio` 何时更改?

python - python SWIG对象比较