Bedingung

Bedingungen werden bei Kontrollstrukturen verwendet, um den Programmablauf zu steuern. Sie stehen jeweils in runden Klammern () nach dem entsprechenden Keyword. Die meisten Kontrollstrukturen benötigen einen boolschen Wert, um je nachdem einen bestimmten Programmteil auszuführen, oder nicht. Andere Kontrollstrukturen benötigen einen Dezimalwert.

Jede Anweisung in C und C++ gibt einen Wert zurück, welcher ausgewertet werden kann. Wird für die Bedingung ein boolscher Wert benötigt, so wird der Wert 0 als false und jeglicher Wert, der nicht 0 ist, als true angenommen.

Details

Die Festlegung, dass jeglicher Wert, der nicht 0 ist, als true angenommen wird, ist insbesondere nützlich für die Überprüfung der Gültigkeit von Pointern, welche gemäss allgemeinem Bewusstsein auf 0 gesetzt werden, wenn sie ungültig sind. Vorsicht: Weder die Sprachen C oder C++ selbst, noch irgend ein Compiler initialisieren Pointer automatisch auf Null, dies muss durch den Programmierer stets manuell vorgenommen werden.

Bei der for-Schleife steht die Bedingung getrennt durch Semikolons ; an zweiter Stelle innerhalb der runden Klammern (). Die Bedingung darf bei der for-Schleife auch leer sein. Eine leere Bedingung wird als true behandelt.

int i; for(i=0; ;i++){ printf("%d\n", i); if(i >= 4){break;} }

0 1 2 3 4

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 stets um den Zuweisungsoperator, der in jedem Fall einen Wert zuweist, und ihn nicht vergleicht. Solche Fehler passieren bei Neueinsteiger häufig:

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

Number is 43

Korrekt wäre folgendes:

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

Bedingungsabfolge

Die Bedingung besteht normalerweise aus einer einzigen Anweisung. Es ist jedoch durch eine Auflistung von Anweisungen, getrennt mit Komma , (siehe Aufzählungs-Operator) möglich, mehrere Anweisungen in die Bedingung zu packen. Die letzte Anweisung (von links nach rechts) gibt den schlussendlichen Wert zurück, welcher die Kontrollstruktur steuert.

int number = 42; if(number++, number > 42){ printf("%d is greater than 42.\n", number); }

43 is greater than 42.

Innerhalb dieser Abfolge können nur Anweisungen stehen, keine Kontrollstrukturen. Bedingungen innerhalb Bedingungen sind nicht zulässig. Das folgende Konstrukt jedoch ist, da es sich um einen Operator handelt, und obgleich keinerlei Sinn dahinter zu finden ist, möglich:

int number = 42; if(number = (number > 41) ? 43 : 0, number > 42){ printf("%d is greater than 42.\n", number); }

43 is greater than 42.

Der Sinn von Bediungungsabfolgen ist dem Autor nicht richtig ersichtlich. Tests auf dem System des Autors haben ergeben, dass Variablendeklarationen zusammen mit Bedingungsabfolgen nicht zulässig sind. Ein mehr oder weniger sinnvolles Beispiel ohne Variablendeklarationen will dem Autor nicht einfallen.