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


von Frank (Gast)


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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nie mit "TRUE" vergleichen. Nur mit != FALSE bzw. != 0 vergleichen bzw. 
den Vergleich ganz weglassen:
1
if (myFunc())
2
{
3
  // machwas
4
}

von Frank (Gast)


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!

von Frank (Gast)


Lesenswert?

@ Rufus,

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

Gruß Frank

von Thomas B. (yahp) Benutzerseite


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.
1
if (boolvar) ...
2
...
3
if (!boolfunc()) ...

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.