gpt4 book ai didi

c++ - #ifdef SWIG : When does this conditional compilation is taken into consideration?

转载 作者:行者123 更新时间:2023-11-30 04:07:58 25 4
gpt4 key购买 nike

我的标题 sample.h 中有这个:

#include <iostream>
#ifdef SWIG
int a = 0;
#endif

在我的 sample.i 中:

%module sample
%{
#include "sample.h"

%}
#include "sample.h"

但是,我看不出有和没有#ifdef SWIG 之间有什么区别...

能否请您告诉我在哪里以及如何找到差异,差异是什么?

非常感谢!

最佳答案

您的 .i 文件有错误。最后一行应该是 %include 而不是 #include。通过此更改,构建包装器(我使用的是 Python)会产生:

sample_wrap.cxx
sample_wrap.cxx(3200) : error C2065: 'a' : undeclared identifier
sample_wrap.cxx(3211) : error C2065: 'a' : undeclared identifier

这是因为编译后的 SWIG 未在 #include 期间定义,并且 a 不存在于结果代码中。当 SWIG 处理 %include 时,SWIG 被定义并为 a 生成一个不存在的接口(interface)。

删除 #if 包装器会生成一个正确包装的全局变量:

>>> import sample
>>> sample.cvar.a
0

关于c++ - #ifdef SWIG : When does this conditional compilation is taken into consideration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22119641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com