【问题标题】:SWIG syntax error when defining bool定义 bool 时出现 SWIG 语法错误
【发布时间】:2016-07-23 19:57:01
【问题描述】:

SWIG 无法处理以下模块,并显示错误消息“example.i:2: Error: Syntax error in input(1)”

%module example
typedef unsigned char bool;
bool isEven(int number);

bool 更改为boll 时,一切正常。似乎 SWIG 将 bool 视为 C 中的内置类型。但是,只有 _Bool 是 C99 中的内置类型,并且除非包含 stdbool.h

,否则未定义 bool

我有一个需要为 java 包装的大型接口,其中包含以下 typedef:

#ifndef __cplusplus
typedef unsigned char bool;
#endif

我可以通过添加来解决问题

#define __cplusplus

在包含定义接口的标头之前添加到我的 SWIG 模块文件。 但是在这种情况下,包括 cpointer.i 不再起作用(错误:#ifdef 缺少标识符,这发生在包含 #ifdef __cplusplus 的 cpointer.i 的每一行)

关于如何使用我的接口头文件而不更改它(即不删除我的 bool typedef)并且仍然能够使用 cpointer.i 的任何建议?

【问题讨论】:

  • 好像bool这个名字已经定义好了。例如,它可以是一个宏。所以你需要检查什么是布尔值。而不是 bla...bla..bla.. 您应该显示错误消息。
  • 我什么都不包含,所以没有代码可以定义bool这个名字。当我在 example.i 上运行 SWIG 时,它只包含上面的 3 行,我得到“example.i:2: Error: Syntax error in input(1)。”

标签: java c boolean swig


【解决方案1】:

如果在您的情况下确实没有定义 bool,则使用 SWIG 接口文件中的宏将其重命名为其他名称应该没有问题,即:

%module example
#define bool uchar_bool
typedef unsigned char bool;
bool isEven(int number);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    相关资源
    最近更新 更多