Nullwerte von Datentypen?



  • Hat jemand eine Tabelle parat wie der ANSI Standard Nullwerte von Datentypen festlegt?
    will mich nicht darauf verlassen, dass mein Compiler standardkonform ist 😉

    wer mit dieser Frage nichts anfangen kann:
    Globale Variablen werden auf ihre entsprechenden Nullwerte initialisiert.
    Das heißt: Weißt man einer globalen Variablen keinen Wert zu hat sie impliziet ihren entsprechenden Nullwert



  • ich denke mal das ist sizeof(type)*'\0'



  • Globale Variablen werden auf ihre entsprechenden Nullwerte initialisiert.
    Das heißt: Weißt man einer globalen Variablen keinen Wert zu hat sie impliziet ihren entsprechenden Nullwert

    Falsch.



  • *lol*
    Ich liebe diese Antworten.
    Dann sag doch gleich wie´s richtig ist 🙄

    Die Variablen müssen noch als static Deklariert werden.



  • SeppSchrot schrieb:

    Die Variablen müssen noch als static Deklariert werden.

    d.h. globale variablen ohne 'static' haben zufälligen inhalt?
    ist das bei c anders als bei c++?



  • Nein, hab mich vertan.

    Globale und lokale-statische Variablen werden initalisiert.



  • so würde es auch wieder mit den Angaben in meinem Buch übereinstimmen

    war bis vor kurzen auch der Meinung nicht initialiseirte Variablen hätten einen undefinierten Wert - das stimmt aber nicht für globale und statische Variablen

    mich würde jetzt interessieren: Welchen Wert haben die den? was ist z. B. der Nullwert von char? ist das ein kleines 'a' ein Großes 'A' oder ist das das Zeichen '0' oder einfach das erste Zeichen nach Latin-I?



  • Bei BuiltIns werden alle Bits auf 0 gesetzt.
    Ergo 0 für char.



  • SeppSchrot schrieb:

    Bei BuiltIns werden alle Bits auf 0 gesetzt.

    Jein. Zeiger werden auf den Nullpointer gesetzt, aber dessen Bitmuster ist nicht notwendigerweise eins das nur aus 0 besteht. Bei char stimmt das so allerdings.



  • SeppSchrot schrieb:

    Nein, hab mich vertan.
    Globale und lokale-statische Variablen werden initalisiert.

    ah, ich hatte mich schon erschrocken...

    SeppSchrot schrieb:

    Bei BuiltIns werden alle Bits auf 0 gesetzt.

    structs auch:

    typedef struct s
    {
        int a;
        char b;
        float c;
        char d[10];    
    } S;
    
    S e1;
    
    int main()
    {
        static S e2;
        printf ("%d %d %f %s\n", e1.a, e1.b, e1.c, e1.d);
        printf ("%d %d %f %s\n", e2.a, e2.b, e2.c, e2.d);
    }
    

    die packt der linker alle in den 'bss' bereich. vor'm aufruf von 'main' läuft 'ne asm-routine ab, die den ganzen bereich mit nullen vollschreibt bzw. die initialierungswerte einsetzt (falls vorhanden)

    'static' bei globalen variablem bedeutet ja nur, dass der zugriff aus anderen code-dateien verhindert wird


Anmelden zum Antworten