x==0 und !x
-
Hallo Leute,
im Code anderer Leute sehe ich eigentlich immer die Variante, x==0 bzw. x!=0 Abfragen durch die Kurzformen !x bzw. x zu ersetzen. Ich habe sie nie benutzt, da ich die längere Schreibweise übersichtlicher finde. Nun frage ich mich allerdings, da ich eigentlich bei anderen Programmen immer die Kurzformen sehe (scheint wohl Konvention zu sein?), ob es da irgendwie einen verdeckten Vorteil gibt, den ich einfach nicht erkenne. Allerdings konnte ich dazu nichts im Netz finden, deshalb werfe ich die Frage einfach mal in den Raum:
Hat es irgendeinen Vorteil, die Kurzformen zu benutzen oder ist es einfach nur Geschmackssache?
Vielen Dank schonmal,
plizzz
-
Ich benutze !, um "not" oder "ungültig" zu lesen und !=0 um "ungleich null" zu lesen.
if(x%7!=0) //wenn x modulo sieben ungleich 0if(!lpAchN) //wenn der long pointer to array of charachter containing Name ungültig
-
Ich vermeide ! weil ich es bei längen Sachen mir unübersichtlich vorkommt, da finde ich es besser "== 0". Oft sehen ich so Sachen wie
if(!(var = some()) && !xyz && (!x || !y))) ...
da verliere ich schnell den Überblick. Manchmal tippe ich lieber etwas mehr und länger, dafür bin ich aber an der sicheren Seite.
-
volkard schrieb:
Ich benutze !, um "not" oder "ungültig" zu lesen und !=0 um "ungleich null" zu lesen.
if(x%7!=0) //wenn x modulo sieben ungleich 0if(!lpAchN) //wenn der long pointer to array of charachter containing Name ungültig
Ich mache das genauso. Wobei es zur besseren Lesbarkeit im Header iso646.h die Macros
not
,and
etc. gibt, die das ganze ein bisschen deutlicher machen. Das ! geht nämlich optisch schnell verloren.(in C++ sind
not
etc. sogar Keywords)
-
Aha ok. Also ist es letztlich wirklich nur Geschmackssache/Stil zum Schaffen von Übersichtlichkeit?
-
Es gab einmal ein Thema, da hieß es der NULL-Pointer muss nicht unbedingt auf 0 zeigen. Deswegen gibt es das macro NULL. Damit wäre
void *p = malloc(4); if (p == 0) //error
möglicherweise falsch, während
void *p = malloc(4); if (!p) //error
durch
void *p = malloc(4); if (p == NULL) //error
ersetzt wird und damit korrekt ist.
Aber niemand kennt ein solches System und niemand weiß wieso NULL != 0 sein sollte.Ich finde, je kürzer desto übersichtlicher (außer bei Variablennamen) und ziehe !x vor. Man kann auch davon ausgehen, dass C-Programmierer auf sowas achten. Im Endeffekt ist es wohl egal, sowohl für die Übersichtlichkeit als auch für den Stil.
-
nwp2 schrieb:
Es gab einmal ein Thema, da hieß es der NULL-Pointer muss nicht unbedingt auf 0 zeigen. Deswegen gibt es das macro NULL. Damit wäre
void *p = malloc(4); if (p == 0) //error
möglicherweise falsch, während
void *p = malloc(4); if (!p) //error
durch
void *p = malloc(4); if (p == NULL) //error
ersetzt wird und damit korrekt ist.
Aber niemand kennt ein solches System und niemand weiß wieso NULL != 0 sein sollte.
-
Typisches Beispiel, warum Halbwissen schlechter als gar kein Wissen ist.
nwp2 schrieb:
Es gab einmal ein Thema, da hieß es der NULL-Pointer muss nicht unbedingt auf 0 zeigen. Deswegen gibt es das macro NULL
Damit wäre
void *p = malloc(4); if (p == 0) //error
möglicherweise falsch
Nein, auch Systeme, auf denen Nullzeiger nicht die numerische Adresse 0 haben, müssen hier die Konstante 0 als Nullzeiger interpretieren. Das Makro NULL ist folgerichtig auch einfach zu 0 oder (void*)0 o.ä. definiert.
Da wir das schon hundertmal durchgekaut haben (wahrscheinlich sogar in dem Thema, das du oben erwähnst), mach ich hier mal Schluss und empfehle dir, die einschlägigen FAQs, Literatur oder gar den Standard zu lesen.
@Tim: Sorry, dass ich trotzdem poste, aber Links liest doch keiner
-
Ich hasse es wenn Leute sagen "fang nochmal beim kleinen Einmaleins an" wenn man einen Fehler macht.
Zumal ich "möglicherweise" und nicht "definitiv" benutzt habe und meinte, dass es nicht relevant sei.
-
Ob das jetzt ein kleiner Fehler ist, sei mal dahingestellt, aber es war immerhin der zentrale Punkt deines Postings. Und niemand hat dich zum kleinen 1x1 zurückgeschickt, es sei denn, du bezeichnest den Standard als kleines 1x1. In dem Fall (Hut ab!) solltest du aber IMHO den Ehrgeiz haben, auch solche Dinge nicht als irrelevante Details abzutun.
-
plizzz schrieb:
Hat es irgendeinen Vorteil, die Kurzformen zu benutzen oder ist es einfach nur Geschmackssache?
Also, einen compiliertechnischen Vorteil wird es wohl nicht haben. Ich benutze bei solchen Sachen stets
x == 0
undx != 0
. Die Variantex
und!x
benutze ich nur, wenn x ein bool'scher Ausdruck ist. Selbst bei Zeigern schreibe ich stetsx == NULL
oderx != NULL
. Das hab ich mir von C# so angewöhnt, wo es nämlich nicht möglich ist,x
und!x
zu schreiben, wenn x irgendetwas anderes als bool darstellt. Und ich finde diese Regelung ganz gut.
-
nwp2 schrieb:
Ich hasse es wenn Leute sagen "fang nochmal beim kleinen Einmaleins an" wenn man einen Fehler macht.
Zumal ich "möglicherweise" und nicht "definitiv" benutzt habe und meinte, dass es nicht relevant sei.
-
Jetzt benutzen die Spammer schon Nicks von Unregistrierten und tun so, als würden sie antworten. Nicht schlecht!
-
Okay, damit wäre meine Frage zu Genüge beantwortet.
Danke