Forum: Compiler & IDEs RowleyCrossworks und bool


von Matze T. (gruetzwurschd)


Lesenswert?

Hallo Leute,

ich hab mal wieder ein problem mit RowleyCrossworks
Und zwar folgendes:
Derzeit probiere ich mit einem STM32 das USB zum laufen zu bringen.
Das funktioniert soweit schonmal ganz okay(wenn ich alle relevanten 
daten ins stammverzeichnis rein klatsche.

Sobald ich probiere eine gewisse struktur zu schaffen in dem ich die 
USB-Dateien in einen Unterordner ablege und versuche zu kompilieren 
bekomme ich immer folgende fehlermeldung sobald irgendwo bool'sch 
variablen auftauchen:

expected '=', ',', ';', 'asm' or '__attribute__' before 'Variablenname'

weiß jemand woran das liegen könnte?

Grüße Tarkan

von (prx) A. K. (prx)


Lesenswert?

"bool" ist kein Standardtyp in Standard-C.

von Matze T. (gruetzwurschd)


Lesenswert?

soweit klar :)

aber wo wird der entsprechende dateityp definiert. bzw. was muss ich in 
die entsprechende datei einbinden damit es hinhaut?

von Peter (Gast)


Lesenswert?

typedef uint_8 bool;

von Peter (Gast)


Lesenswert?

#define TRUE  (0==0)
#define FALSE (0!=0)

typedef uint_8 bool;

von Matze T. (gruetzwurschd)


Lesenswert?

Peter schrieb:
> typedef uint_8 bool;

Hat rein garnix gebracht.

Ich stelle mal die frage anders:
Wieso kennt der Compiler den Typ "bool" wenn die Datei im 
Stammverzeichnis liegt, aber nicht wenn sie in einem Unterordner liegt?

von Matze T. (gruetzwurschd)


Lesenswert?

Peter schrieb:
> #define TRUE  (0==0)
> #define FALSE (0!=0)
>
> typedef uint_8 bool;

auch das hilft nicht ! :(

von Matze T. (gruetzwurschd)


Lesenswert?

Also ich hab die lösung gefunden:

man muss in jeden unterordner die datei "stm32f10x.h" reinkopieren 
?"?!?!

irgendwie eine ziemlich blöde lösung!!

aber das hier allein hilft nichts.

#ifndef __cplusplus
typedef enum {FALSE = 0, TRUE = !FALSE} bool;
#endif

ich find es nur komisch wieso der compiler die datei mehrmals haben will

grüße Tarkan

von (prx) A. K. (prx)


Lesenswert?

C99 definiert stdbool.h.

von mh (Gast)


Lesenswert?

Tarkan D. schrieb:
> man muss in jeden unterordner die datei "stm32f10x.h" reinkopieren

Es reicht vermtulich auch, dem Compiler den richtigen Inklude-Pfad 
mitzugeben.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Tarkan D. schrieb:
> Also ich hab die lösung gefunden:
>
> man muss in jeden unterordner die datei "stm32f10x.h" reinkopieren

Ziemlich sicher nicht. Man wird sich ansehen müssen, wie die 
#include-Anweisungen in den verschiedenen Dateien aufgebaut sind, und 
natürlich muss man sich auch die Fehlermeldungen genau ansehen, 
beginnend bei der ersten.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Übrigens, 0 und 1 tun es auch, lustige Konstrukte wie 0==0 sind 
überflüssig.

von Rolf Magnus (Gast)


Lesenswert?

A. K. schrieb:
> "bool" ist kein Standardtyp in Standard-C.

Naja, es ist ein Standard-Typedef für _Bool (in <stdbool.h>), welches 
ein Standardtyp ist. Das ist seit 12 Jahren in C so genormt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:
> Das ist seit 12 Jahren in C so genormt.

Dennoch sind C-Compiler, die C99 implentieren, immer noch sehr rar. 
Vermutlich, weil die Compilerhersteller die Vorzüge von C99 gegenüber 
C89 ("ANSI-C") nicht so recht zu würdigen wissen.

von Rolf Magnus (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Rolf Magnus schrieb:
>> Das ist seit 12 Jahren in C so genormt.
>
> Dennoch sind C-Compiler, die C99 implentieren, immer noch sehr rar.

GCC kann's, und wir sind ja hier im GCC-Forum.

> Vermutlich, weil die Compilerhersteller die Vorzüge von C99 gegenüber
> C89 ("ANSI-C") nicht so recht zu würdigen wissen.

Die haben aber anscheinend immer noch nicht gemerkt, daß es C89 
offiziell gar nicht mehr gibt. Man kann die Definiton weder bei ANSI 
noch bei ISO beziehen, da sie vollständig durch C99 ersetzt wurde. Wer 
die C89-Definiiton nicht zufällig noch von früher im Schrank liegen hat, 
kommt an diese gar nicht mehr ran.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.