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 0

    if(!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 0

    if(!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.

    http://c-faq.com/null/machnon0.html



  • 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 und x != 0 . Die Variante x und !x benutze ich nur, wenn x ein bool'scher Ausdruck ist. Selbst bei Zeigern schreibe ich stets x == NULL oder x != 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.

    KISS



  • 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


Anmelden zum Antworten