2015-08-25 3 views
0

Я хочу использовать swig для вызова функций C из Java. Я читаю: SWIG TutorialSwig - почему нам нужно декларировать функции дважды?

И веб содержит пример файла интерфейса:

/* 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)», объявленный в {%%} и в нижней части файла?

+0

Возможно, это просто пример, где могут отображаться объявления функций. – Downvoter

+0

Я видел это в других примерах без объяснений ... –

+0

Потому что вы можете включить заголовочный файл или объявить прототипы своих функций. – Xcrowzz

ответ

1

Материал внутри блока% {%} копируется точно в сгенерированный файл c (example_wrap.c), который будет использоваться в качестве прототипа. Материал за пределами блока используется для генерации функций внутри сгенерированного файла .c.

Лучшим примером было бы предположение, что у вас уже есть заголовочный файл, например, пример. ч с чем-то вроде этого:

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

так внутри example.i у вас есть

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

Теперь созданный файл будет иметь #include «example.h» ближе к началу, которое она нуждается, так что functionIwantToCallFromJava правильно прототипом, но SWIG не должен генерировать много кода для реализации functionIDoNotCareAbout несмотря на то, что определяется в том же заголовочном файле.

Смежные вопросы