@IceMatrix: Der Ausdruck
funktioniert ja nur, weil das Statement ja gar nichts anderes heißt wie
Es ist exakt das selbe. Es ist lediglich für den Menschen anders.
Oder ist bei dir
Code:
if (i) { ...}
if (i != 0) { ...}
auch ein Unterschied? Gegen irgendwas wird i bei der 1. Abfrage auch verglichen. Der Prozessor muss nen Vergleich machen. Für den Compiler ist das halt implizit ein Vergleich gegen 0.
Dass der obere Ausdruck geht liegt ja nur daran, dass ein C-Compiler eben fast jeden Ausdruck als boolschen Ausdruck interpretieren kann mit
* Ausdruck wertmäßig 0: false
* Ausdruck wertmäßig nicht 0: true
Und oh Wunder, nichts anderes ist ja "!= NULL" (bzw "!= 0")...
@gruffi:
Bei einer boolschen Variable finde ich Abfragen mit == auch unschön... es geht hier ja nicht um Zeiger. Schon mal aufgefallen, dass ich bei meiner Funktion, die ich als Beispiel gepostet hab, auch kein "== true" dran gemacht hab? oO
@antred:
Es gibt alt kaum was, was es nicht gibt. Ob das dann repräsentativ ist?
@Whiz-zarD
"Ich will ja nicht wissen, ob der Zeiger ungleich NULL ist, sondern ob der Zeiger auf eine Adresse zeigt"
Die Argumentation versteh ich nicht ganz muss ich sagen. Wenn der Zeiger nicht NULL ist, zeigt er ja auf eine Adresse... wann zeigt er nicht auf eine Adresse? Wenn er NULL ist (wobei NULL im Grunde ja auch ne Adresse ist...)
Es bleibt halt oft nichts anderes übrig, als auf das Gegenteil zu testen, was man wissen will...
Und gerade wenn die Variable eben wo anders definiert wurde, dann finde ich es lesbarer, wenn man die NULL-Prüfung ausschreibt, um eben klar zu zeigen, um welche Typen es sich handelt.
Außerdem ist es "typsicherer", wenn ich weiß ich muss nen Pointer prüfen, kann ich nicht versehentlich ne ähnlich klingende andere Variable nehmen...
also doofes beispiel:
Code:
int file = 1;
FILE* fileptr = fopen(filenames[file], ...);
if (file) {
// file successfully opened
}