首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"%include“和"#include”的区别

"%include“和"#include”的区别
EN

Stack Overflow用户
提问于 2011-06-09 05:00:52
回答 2查看 4.8K关注 0票数 14

在SWIG中,"%include“指令和标准的C "#include”有什么区别?

例如,在所有教程中,为什么它们通常看起来像这样:

代码语言:javascript
复制
%module my_module

%{
#include "MyHeader.h"
%}

%include "MyHeader.h"

这对我来说似乎是多余的。也许有知识的人可以解释清楚。

有没有包含C++代码的首选方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-09 05:07:28

%{ ... %}中的内容被直接传递到输出;它本身不是由SWIG解释的。因此,#include用于确保生成的C/C++代码包含该标头。

相比之下,%include是一个SWIG指令。它告诉SWIG在继续之前先处理头文件。通过这种方式,SWIG将了解该头文件中声明的类型和函数(并为其生成包装器)。

如果头部非常复杂,它可能会混淆SWIG或导致非常大的输出(因为SWIG试图为其中的所有内容生成一个包装器)。在这种情况下,最好只手动声明需要SWIG处理的头部部分,并省略%include。但是,为了编译生成的C++,您可能仍然需要#include

更新

至于“首选”,SWIG更多的是关于什么是有效的,而不是什么是“首选”……如果你有一个非常干净的头文件,为一个单独的类声明了一个很好的接口,你可以简单地%include它并让SWIG自动生成包装器。如果你的头文件很乱(例如iostream),你应该手动告诉SWIG包装什么。但没有硬性规定。

票数 19
EN

Stack Overflow用户

发布于 2011-06-09 05:07:02

%include包含每个文件一次,这意味着您不需要包含保护。默认情况下,#include将被忽略,除非您使用-includeall选项运行SWIG。

此外,预处理器会忽略%{和%}之间的任何内容,并在不对输出进行任何修改的情况下进行复制。

更多你可以读到这个:http://www.swig.org/Doc1.3/Preprocessor.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6285212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档