C Features



  • Hallo,

    mir sind leider einige Features von C unklar, deshalb stelle ich dazu einfach mal ein paar Fragen:

    Ich habe schon des öfteren Konstrukte wie

    `

    typedef struct {

    }myStruct;

    `

    gesehen. Im Prinzip also nur ganz normales struct ohne Members. Wie nutzt man allerdings so etwas? Und was noch viel wichtiger ist: warum? Im GCC Manual steht da leider nicht wirklich viel darüber...

    Mich störts etwas, dass C keine C++ Namespaces kennt. Oki, man kann mit diversen Prefixen und Einsatz von static sich etwas helfen, aber gibts dazu nicht irgendwelche Erweiterungen von Entwicklern? Irgendwelche Doks, die Vorschläge geben wie man sich selbst Namespaces als Aufbau macht? Makros und Token concatenation müssten doch einige Möglichkeiten bieten?

    Hoffe hier kann mir jemand helfen - sollte etwas unklar sein bitte fragen und nicht motzen, danke.


  • Mod

    wuza schrieb:

    Hallo,

    mir sind leider einige Features von C unklar, deshalb stelle ich dazu einfach mal ein paar Fragen:

    Ich habe schon des öfteren Konstrukte wie

    typedef struct {
    }myStruct;
    

    gesehen. Im Prinzip also nur ganz normales struct ohne Members.

    Das ist kein legales C.



  • http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue

    Es wird aber benutzt, die Frage die sich mir nur stellt ist was genau es bewirkt. 😞



  • wuza schrieb:

    http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue

    Es wird aber benutzt, die Frage die sich mir nur stellt ist was genau es bewirkt. 😞

    nene...da scheinst du etwas falsch verstanden zu haben.

    An opaque structure used to hold different types of values. The data within the structure has protected scope

    das ganze sieht so oder so ähnlich aus

    /* header file */
    typedef struct _gvalue_struct GValue;
    
    /* source file */
    struct _gvalue_struct {
       /* some stuff */
    };
    

    Der Sinn dahinter ist, dass man auf die Member von GValue nicht mehr direkt zugreifen kann, du hast lediglich eine Art Vorwärtsdeklaration in der Header-Datei, der genaue Aufbau der Struktur liegt in der Übersetzungseinheit, sondern nur über die bereitgestellten Funktionen. Siehe dazu auch Datenkapselung



  • Oh, hab das leider komplett falsch verstanden danke dir!



  • wuza schrieb:

    Mich störts etwas, dass C keine C++ Namespaces kennt.

    C ist nicht C++, wieso sollte C Sprachkonstrukte von anderen Programmiersprachen kennen? (Zugegeben würde ich Namespaces in C schon haben, aber das ändert trotzdem nicht an meiner Frage)

    wuza schrieb:

    Oki, man kann mit diversen Prefixen

    damit geht es auch prima, ein bisschen schreibarbeit, aber im Prinzip dasselbe. Und an den vorangehenden Beispiele anzuknüpfen: GTK+ zeigt ganz schön, wie man ohne Namespaces auch ganz gut zurecht kommt.



  • Also Namespaces wären schon eine feine Sache, dann bräuchte man keine komischen Prefixes.

    Diese opaken Strukturen hast du übrigens auch in der Standardbibliothek siehe FILE.


Anmelden zum Antworten