www.mikrocontroller.net

Forum: Compiler & IDEs Ist (x==x) immer 1 und (x!=x) immer 0?


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage mich gerade, ob z.B.

U8 senslessFunc(void)
{
  U8 a=3, b=3;
  return(a==b);
}

immer 1 zurückgibt oder ob es auch ein anderer von 0 abweichender Wert 
sein kann? Hintergrund ist die Auswertung wie:

typedef enum{
  FALSE,  //0
  TRUE    //1
}BOOL;

void anotherFunc(void)
{
  if( myFunc() == TRUE )
  {
    //tue was....
  }
}

Testweise haut es hin. Aber wie sieht das unter anderen Compilern aus?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nie mit "TRUE" vergleichen. Nur mit != FALSE bzw. != 0 vergleichen bzw. 
den Vergleich ganz weglassen:
if (myFunc())
{
  // machwas
}

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, mir ist gerade eingefallen, daß

typedef enum{
  FALSE = (1!=1),
  TRUE  = (1==1)
}BOOL;

das Problem ja lösen müßte.

Antwort zu obigen Post würde mich trotzdem noch interessieren!

Danke!

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Rufus,

dem entnehme ich, daß (1==1) nicht zwingend genau 1 sein muß. Danke für 
die Tips!

Gruß Frank

Autor: Thomas B. (yahp) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bringt C99 nicht selber eine Definition von bool mit (per Makro)? Das 
sollte der GCC doch können.

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

Bewertung
0 lesenswert
nicht lesenswert
Frank wrote:

> Ah, mir ist gerade eingefallen, daß
>
> typedef enum{
>   FALSE = (1!=1),
>   TRUE  = (1==1)
> }BOOL;
>
> das Problem ja lösen müßte.

Mir ist so, als würde die comp.lang.c-FAQ irgendwo erläutern, warum
dieses da sinnlos ist.

Ich stimme jedoch mit Thomas B. überein, dass es das Sinnvollste
ist, #include <stdbool.h> zu nehmen sowie den Datentyp "bool" mit
den Werten "true" und "false" (alles klein geschrieben).  Außerdem
siehe Rufus: etwas "Booligeres" als einen Wahrheitswert gibt es
nicht, da nach einem if (oder while oder so) stets ein Wahrheitswert
gefragt wird, verbieten sich Dinge wie == true oder != false.
if (boolvar) ...
...
if (!boolfunc()) ...

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.