i++ =i+1 ?

  • Zitat

    Original von decembersoul

    Code
    void test( char* input )
    [..]     
      test( 0 );
      test(NULL);

    Eigentlich sollte NULL != 0 sein.


    Oh, ne Castingshow! :)


    Gruss,
    Walter

    --seit 2010 kein vdr mehr in Betrieb--
    vdr 1.6.0 + eigene Patchkombination
    GNU/Linux 2.6.23.14 (Debian)
    DVB-S-Karte TT 1.6 (FF, Tuner defekt)
    DVB-S-Karte TT Budget (seit 4/09)
    DVB-T-Karte TT 1300
    DVB-T-USB-StickTerratec Cinergy T USB XE Rev. 2
    PC-Hauptplatine: MSI K8N Neo4-F, AMD 64 (seit 1/07)

  • Zitat

    Original von slime
    ...
    ich muss feststellen, das ich wohl ein "Quiche Eater" bin. aber ich kann hex-arithmetik ohne taschenrechner machen... qualifiziert mich das jetzt wieder als "REAL Programmer"?


    naja, das lassen wir mal gerade so durchgehen... :lachen1

  • Zitat

    Original von decembersoul
    Eigentlich sollte NULL != 0 sein.


    Eigentlich sollte man in C++ NULL garnicht verwenden. Aber in der nächsten Version des Standards gibt es Abhilfe (Trommelwirbel): nullptr und nullptr_t.


    Einfacher macht das die Sprache allerdings auch nicht :D

  • Wo wir gerade bei "nächsten Version des Standards" sind.
    Wird die 0x eigentlich nur C++ oder auch C betreffen?
    Bin in den letzten Jahren immer mehr in Richtung C gekommen. C++ leider nur noch selten.

  • Die heutigen Sprachen C und C++ sind - bis auf die Tatsache, dass beide aus dem C von 1989 entstanden sind - völlig unabhängig voneinander. Das merkt man u.a. daran, dass man C++-Programme, die scheinbar nur C-Elemente enthalten, trotzdem nicht zwangsläufig auch durch einen C-Compiler bekommt, und auch daran, dass nicht alle C-Programme (sogar recht wenige, um genau zu sein) von einem C++-Compiler akzeptiert werden.


    Neue Sprachstandards werden von den Konsortien getrennt entworfen und verabschiedet. Wobei es natürlich vorkommt, dass C Elemente aus C++ übernimmt (z.B. die Variablendefinition in C99) und auch umgekehrt (C++0x wird einiges aus der C99-Standardbibliothek übernehmen). Auf der anderen Seite gibt es auch Dinge, die explizit nicht übernommen werden (z.B. wird C++ 0x nicht die aus C99 bekannten Variable-Length-Arrays übernehmen).


    Wo wir sowieso schon bei Obfuscated Code sind, hier ist mal ein kleiner Code, welcher Dir sagen kann ob er mit einem C- oder C++-Compiler übersetzt wurde.


    Code
    printf("C%s\n"; sizeof('A')==sizeof(char)?"++":"");
  • Zitat

    Originally posted by LordJaxom
    Wo wir sowieso schon bei Obfuscated Code sind, hier ist mal ein kleiner Code, welcher Dir sagen kann ob er mit einem C- oder C++-Compiler übersetzt wurde.


    Code
    printf("C%s\n", sizeof('A')==sizeof(char)?"++":"");


    Warum ist das so?
    Wird 'A' nicht als char abgebildet?
    Warum ist sizeof('A') = 4byte in C?

  • Ein Character Literal hat in C den Typ int, in C++ jedoch char. Warum konnte ich nicht feststellen, wenn diese Tatsache kommentiert wird, heisst es meist "for historical reasons". Ein möglicher Grund könnte sein, dass - um Bibliothek und Compiler zu vereinfachen - in K&R C Parameter grundsätzlich als int übergeben wurden (auch wenn sie tatsächlich kleiner waren). Wenn Zeichenliterale selbst ints sind, spart man hier eine Konvertierung.


    Auch kommt es in alten C-Programmen oft vor, dass Zeichen in int-Variablen verwaltet werden. Nicht zuletzt geben einige Bibliotheksfunktionen einen char oder aber -1 o.ä. als Fehlercode zurück. Da das 257 Werte sind (0x00..0xff und -1), passt das nicht in char, welches nur 255 Werte darstellen können muss.



    Letztlich sind das aber alles Vermutungen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!