"%include"和"#include"的区别
Difference between "%include" and "#include"
在SWIG中,"%include"指令和标准C"#include"之间有什么区别?
例如,在所有的教程中,为什么它们通常看起来像这样:
%module my_module
%{
#include "MyHeader.h"
%}
%include "MyHeader.h"
这在我看来是多余的。也许有知识的人可以澄清。
是否有包含C++代码的首选方法?
%{ ... %}
中的内容直接传递到输出;SWIG不对其本身进行解释。因此,#include
在那里确保生成的C/C++代码包括该标头。
相比之下,%include
是SWIG指令。它告诉SWIG在继续之前处理该头文件。通过这种方式,SWIG将了解(并为其生成包装器)头文件中声明的类型和函数。
如果标头非常复杂,它可能会混淆SWIG或导致非常大的输出(因为SWIG试图为其中的所有内容生成包装器)。在这种情况下,最好只手动声明需要SWIG处理的标头部分,并省略%include
。但是您可能仍然需要#include
以便编译生成的C++。
[更新]
至于"首选",SWIG更多的是关于什么有效,而不是什么是"首选"。。。如果您有一个非常干净的头文件,为单个类声明了一个漂亮的接口,那么您只需%include
它,并让SWIG自动生成包装器。如果您的头文件非常粗糙(例如iostream
),您应该手动告诉SWIG要包装什么。但没有硬性规定。
%include包含每个文件一次,这意味着您不需要include保护。默认情况下,#include将被忽略,除非您使用-includeall选项运行SWIG。
此外,预处理器将忽略%{和%}之间的任何内容,并在不对输出进行任何修改的情况下进行复制。
您可以阅读以下内容:http://www.swig.org/Doc1.3/Preprocessor.html.
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 既然存在危险,为什么项目要使用-I include开关
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何将更多文件夹添加到c++include路径
- 什么是"#include <boost/functional/hash.hpp> "?
- C++ - "!pointer"和"pointer == nullptr"的区别?
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- #include "MyClass.h" 和 #include ".myclass.h" 有什么区别
- 来自 C 的指令 #include 和来自 C++ 的指令之间有什么区别吗?
- #include <file> #include < file.h> - 有什么区别?
- #include 和复制粘贴有什么区别?
- <iostream> #include 中和"iostream"(引号)之间的区别?
- 使用 std::vector 和 include <vector>之间的区别
- C++中include指令和forward声明之间的区别
- #include<> 和 #define " " 有什么区别
- SWIG: %import和%include的区别
- "%include"和"#include"的区别