2016-04-04 9 views
-1

Das folgende Modul ausfällt durch SWIG mit der Fehlermeldung „example.i: 2: Fehler: Syntaxfehler in Eingang (1)“ verarbeitet wirdSWIG Syntaxfehler bei der Definition bool

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

Beim Wechsel zu boolboll alles funktioniert gut. Es scheint, dass SWIG Bool als einen eingebauten Typ in C behandelt. Jedoch ist nur _Bool ein eingebauter Typ in C99 und Bool ist nicht definiert, außer wenn ich eine große Schnittstelle habe, die ich für Java umhüllen muss, die das Folgende enthält: stdbool.h typedef:

#ifndef __cplusplus 
typedef unsigned char bool; 
#endif 

ich um die Probleme, die durch Hinzufügen der Header Definition der Schnittstelle vor, einschließlich

#define __cplusplus 

meiner SWIG Moduldatei bekommen konnte. jedoch in diesem Fall einschließlich cpointer.i funktioniert nicht mehr (Fehler: Fehlende Kennung für #ifdef, die für jede Zeile von cpointer.i auftritt enthält #ifdef __cplusplus)

Vorschläge, wie ich meine Schnittstelle Header-Datei ohne Änderung verwenden können es (dh ohne mein bool typedef zu entfernen) und cpointer.i noch benutzen zu können?

+0

Es scheint, dass der Name bool bereits definiert. Zum Beispiel kann es ein Makro sein. Also müssen Sie überprüfen, was der Bool ist. Anstatt der Bla ... bla..bla .. solltest du die Fehlermeldung anzeigen. –

+0

Ich schließe nichts ein, daher gibt es keinen Code, der den Namen bool definieren kann. Wenn ich SWIG auf example.i ausführe, das nur die 3 Zeilen von oben enthält, bekomme ich "example.i: 2: Error: Syntax error in input (1)." – sun

Antwort

1

Wenn bool wirklich ist in Ihrem Fall definiert ist, sollte es kein Problem sein, es zu etwas anderes mit einem Makro in der SWIG Interface-Datei umbenennen, dh tun:

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