了解Swig教程示例中的重复内容

时间:2018-12-13 04:56:07

标签: python swig

我是初学者。我有兴趣在Ubuntu机器上从Python调用C ++。

我刚刚开始在http://www.swig.org/tutorial.html

处观看入门教程。

请考虑按如下所示复制该页面example.i上的接口文件。

 /* 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();

为什么在文件的后半部分重复%{ %}之间的内容?如手册中所述,http://www.swig.org/Doc3.0/SWIGDocumentation.html#Introduction_nn5

  

%{%}块提供了用于插入其他代码的位置,   例如C头文件或其他C声明,   生成的C包装器代码。

但是在示例中它没有解决重复的问题。我想念什么?

1 个答案:

答案 0 :(得分:2)

%{%}之间的代码逐字插入到生成的SWIG包装器中,并用于使包装器代码访问列出的标头或声明。

这些标记之外的代码指示SWIG为列出的每个声明(或整个头文件)进行包装。

如果在第一部分中省略了extern int fact(int n);,则包装器在编译并链接到包含该函数的源或库时,将无法访问该函数,因为缺少extern声明。如果不考虑第二部分的内容,则不会生成可从脚本语言访问的包装器。

有一个快捷方式:

%inline %{
...
%}

这指示SWIG插入和包装声明。