in struct variable initialisieren



  • UINT_MAX
    du musst dazu nur die <limits.h> #includen
    🙂



  • ah, habs gefunden es ist:

    #include limits.h

    INT_MAX oder UINT_MAX

    Bei

    printf("%d",UINT_MAX)
    

    wird -1 angezeigt, weiß jemand wieso? und
    gehört limits.h zur Standardbibliothek?



  • jay186 schrieb:

    Bei

    printf("%d",UINT_MAX)
    

    wird -1 angezeigt, weiß jemand wieso?

    weil, wegen des %d, printf den wert als 'signed' interpretiert.
    probier mal %u

    jay186 schrieb:

    und
    gehört limits.h zur Standardbibliothek?

    ja, die sollte bei jeder standardkonformen C toolchain dabei sein.
    🙂



  • danke!



  • gibts in C keinen Konstruktor für Structs???
    naja nehme an, das dies erst durch die c++ OO hinzukam..



  • BorisDieKlinge schrieb:

    gibts in C keinen Konstruktor für Structs???

    Doch. Man muss ihn halt schreiben. fopen() ist z.B. der Konstruktor für ein Objekt FILE.



  • jay186 schrieb:

    @undertaker: Das ist super! Genau so brauch ich das! Danke

    bei grösseren structs würde ich das aber nicht mehr so machen, weil dann 'ne menge bytes durch die gegend kopiert werden. besser so etwa:

    // so...
    void InitBeispiel (struct Beispiel *b)
    {
       b->Zahl = 0;
    }
    // ...oder so
    #define INIT_BEISPIEL(b) (b).Zahl=0
    

    🙂



  • @Tim: aber das ist ja nur ein pseudo konstruktor...



  • BorisDieKlinge schrieb:

    @Tim: aber das ist ja nur ein pseudo konstruktor...

    Was macht einen nicht-pseudo-Konstruktor deiner Meinung nach aus?



  • er wird automatisch beim erzeugen eines obejktes aufgerufen.,..



  • BorisDieKlinge schrieb:

    er wird automatisch beim erzeugen eines obejktes aufgerufen.,..

    Das automatisch ist die Definition die man in C++ hat. In C gibt es nichts automatisches. Warum soll es aber nicht ein echter CTor sein, nur weil man selber etwas machen muss?

    C ist nicht C++, deshalb kann man nicht die Definitionen so einfach mischen. fopen ist der Konstruktor für FILE* Objekte. Ein Objekt ist erst dann ein echtes Objekt wenn der Konstruktor ausgeführt wurde - ob der nun automatisch ausgeführt wird oder nicht, sollte keine Rolle bei der Definition spielen. Es ist natürlich praktischer wenn er automatisch ausgeführt wird, keine Frage - aber viele Sprachen verlangen einen expliziten CTor aufruf (in Eiffel muss man zB explicit "object.make" aufrufen, in Java muss man =new Class() schreiben,...)



  • BorisDieKlinge schrieb:

    er wird automatisch beim erzeugen eines obejktes aufgerufen.,..

    oder - er existiert, auch wenn er nicht benötigt wird 😉

    Shade Of Mine schrieb:

    Ein Objekt ist erst dann ein echtes Objekt wenn der Konstruktor ausgeführt wurde -

    was ist der unterschied zwischen einem objekt und einem echten objekt?



  • Undertaker schrieb:

    Shade Of Mine schrieb:

    Ein Objekt ist erst dann ein echtes Objekt wenn der Konstruktor ausgeführt wurde -

    was ist der unterschied zwischen einem objekt und einem echten objekt?

    Mit einem echten Objekt kann man arbeiten, ohne daß das Programm zusammenbricht. (will heißen, nicht-initialisierte Variablen in C sind nur bedingt einsetzbar - und damit noch keine "echten" Objekte)



  • CStoll schrieb:

    Undertaker schrieb:

    Shade Of Mine schrieb:

    Ein Objekt ist erst dann ein echtes Objekt wenn der Konstruktor ausgeführt wurde -

    was ist der unterschied zwischen einem objekt und einem echten objekt?

    Mit einem echten Objekt kann man arbeiten, ohne daß das Programm zusammenbricht. (will heißen, nicht-initialisierte Variablen in C sind nur bedingt einsetzbar ...

    ja, stimmt, aber trotzdem würde ich einem uninitialisierten objekt nicht die eigenschaft des 'objekt-seins' absprechen wollen.
    🙂



  • Undertaker schrieb:

    ja, stimmt, aber trotzdem würde ich einem uninitialisierten objekt nicht die eigenschaft des 'objekt-seins' absprechen wollen.
    🙂

    [bitte überlesen]
    und wieso nicht? Vielleicht sind das im eigentlichen Sinne keine C++ Objekte, aber C Objekte. Ich finde also die Objekt Bezeichnung für rechtfertigt.
    [/biite überlesen]

    edit: sorry Undertaker, hab was verwechselt, da bin ich deiner Meinung.


Anmelden zum Antworten