www.mikrocontroller.net

Forum: Compiler & IDEs boolsche Werte true und false


Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem. Bei verwendung von boolschen Werten wie true und
false gibt mir der gcc folgende Fehlermeldung:

../test.c:81: error: `false' undeclared (first use in this function)

Muss man dafür eine spezielle Header-Datei einbinden oder per #define
selbst definieren?

Gruß Slowflyer

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

nachdem ich die beiden Schlüsselwörter true und false nun per define
definiert habe, kennt der compiler das Schlüsselwort bool nicht mehr.
Hm... Sehr eigenartig. Scheinbar kennt er die boolschen Datentypen
standardmäßig nicht. Kann mir da jemand mal einen Tip geben? (Am
liebsten wäre mir, dass eine bool Variable auch nur ein Bit belegt)

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bool gibt es halt beim avr-gcc nicht, mach dir nichts draus. Verwende
einfach unsigned char als Datentyp und die Sache passt.
Falls es beim RAM auf jedes Byte ankommt dann musst du dir Bitfelder
von Hand anlegen, dann ist die Sache aber nicht mehr performant.

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für die schnelle Antwort. Ich habe zufällig die
Headerdatei stdbool.h gefunden. Damit hat sich das Problem erledigt
(erstmal). Werd es erstaml so probieren, und wenn mir mal der Speicher
langsam ausgehen sollte auf Bitfelder umsteigen.

Nochmals Danke!!!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich habe zufällig die
> Headerdatei stdbool.h gefunden.

Genau so schreibt es C99 vor, bool, true und false gibt es nur,
wenn man diesen Header includet -- anders als bei C++, da sind
es builtins (auch beim GCC im C++-Mode natürlich).

Guck aber mal genau hin, mir ist so, als wäre der bool da drin
ein int, also eine 16-bit-Zahl.  Eventuell willst du ja doch
lieber einen uint8_t nehmen und TRUE und FALSE dann selbst als
Makros deklarieren.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder eben gleich C++ nehmen.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei dann der bool-Typ sicher genauso 16 bits ist...

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Überlegung mit den 16Bit ist gut. Sizeof gibt bei der stdbool.h 1
zurück. Also kann man davon ausgehen, dass der Bool-Wert ein Byte
belegt. D.h. der Umweg über eigene Definitionen kann man sich sparen.

Danke für die Anregungen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.