Gleich-Operator ==

Der Gleichheits-Operator führt einen Vergleich zweier Operanden aus. Wenn beide Operanden gleich sind, so gibt der Operator den boolschen Wert true zurück, ansonsten false. In C wird anstelle von true der Wert 1 und anstelle von false der Wert 0 zurückgegeben. Der Gleichheits-Operator wird sehr häufig für Bedingungen in Kontrollstrukturen verwendet.






a equals b
#include <stdio.h>

int main(){
  int a = 10;
  int b = 10;
  if(a == b){printf("a equals b\n");}
  return 0;
}

Details

Der Gleichheits-Operator erwartet zwei Operanden als rvalues und wird von links nach rechts abgearbeitet. Der Rückgabewert ist ein rvalue, in C ein Integer-Typ, in C++ ein boolscher Typ.

Der Operator ist zulässig für arithmetische (Integer- und Fliesskomma-) Typen, boolsche Typen sowie Pointer. Handelt es sich bei den Typen der beiden Operanden um Pointer-Typen, so wird nach den Regeln der Pointer-Arithmetik vorgegangen. Handelt es sich bei den Typen der beiden Operanden um arithmetische Typen, so wird gegebenfalls eine automatische arithmetische Umwandlung vorgenommen. Entsprechen die Typen keinen der genannten Typen, so wird ein implizites Casting vorgenommen, welches gegebenfalls zu Compiler-Fehlern oder Warnungen führen kann. Warnungen sowohl von der Pointer-Arithmetik, der arithmetischen Umwandlung, als auch von impliziten Castings können mittels explizitem Casting unterdrückt werden.

Umsteiger von anderen Sprachen auf C oder C++ seien gewarnt, dass der Gleichheits-Operator in C zwei Gleichheitszeichen == hat und nicht eines. Beim Operator mit einem Gleichheitszeichen = handelt es sich um den Zuweisungsoperator, der in jedem Fall einen Wert zuweist, und ihn nicht vergleicht. Solche Fehler passieren bei Neueinsteiger häufig:


Number is 43
int number = 42;
if(number = 43){printf("Number is %d\n", number);}

Korrekt wäre folgendes:


no output
int number = 42;
if(number == 43){printf("Number is %d\n", number);}