Warum hast du
mit doppelten Klammern geschrieben?
Aber nicht etwa, weil dir der Compiler das empfohlen hat:
1 | warning: suggest parentheses around assignment used as truth value
|
Wenn doch: Schau dir die Meldung noch einmal genau an: Da ist die Rede
von "assignment", was ein wichtiger Hinweise auf einen mögliche Fehler
ist.
Tipp: Schreibe in Zukunft die If-Bedingungen grundsätzlich in einfache
Klammern (wobei natürlich innerhalb des Ausdrucks weitere Klammern
vorkommen dürfen) und aktiviere die Warnungen des GCC mit -Wall. Lässt
du dann versehentlich das zweite Gleichheitszeichen weg, liefert der
GCC die obige Warnung.
In den ganz seltenen Fällen, wo du das Ergebnis einer Zuweisung auf null
abprüfen möchtest, schreibst du das explizit hin wie in diesem Beispiel:
1 | int countchar(char *str, char ch) {
|
2 | int n = 0;
|
3 |
|
4 | while((str = strchr(str, ch)) != NULL) {
|
5 | str++;
|
6 | n++;
|
7 | }
|
8 | return n;
|
9 | }
|
Damit teilst du deine Absicht nicht nur dem Compiler, sondern auch einem
späteren Leser des Quellcodes mit.
Du kannst aber auch Zuweisungen innerhalb von Bedingungen auch gleich
vermeiden, auch wenn dadurch der Code etwas länger wird.