为什么 Swig 接口文件中存在这种冗余?
Why this redundancy in Swig interface file?
我看到 here swig 接口文件在 2 个地方(在 %{ }% 部分中和之后)有相同的声明。
/* 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();
为什么需要这种冗余?
%{
和 %}
之间的代码直接注入到生成的 SWIG 包装器代码中,以使声明对编译器可用。例如,您可以在这个块中有一个实用函数,它只对编译器可见但不暴露给目标语言,或者添加编译包装器所需的 #include
语句。
该块之外的代码由 SWIG 解析并暴露给目标语言。如果您遗漏了本节中的其中一项声明,它就不会暴露给目标语言。
在这种情况下,您可以通过使用 %inline
来消除冗余,它既将代码注入包装器又对其进行解析以暴露给目标语言:
%module example
%inline %{
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}
我看到 here swig 接口文件在 2 个地方(在 %{ }% 部分中和之后)有相同的声明。
/* 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();
为什么需要这种冗余?
%{
和 %}
之间的代码直接注入到生成的 SWIG 包装器代码中,以使声明对编译器可用。例如,您可以在这个块中有一个实用函数,它只对编译器可见但不暴露给目标语言,或者添加编译包装器所需的 #include
语句。
该块之外的代码由 SWIG 解析并暴露给目标语言。如果您遗漏了本节中的其中一项声明,它就不会暴露给目标语言。
在这种情况下,您可以通过使用 %inline
来消除冗余,它既将代码注入包装器又对其进行解析以暴露给目标语言:
%module example
%inline %{
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}