Vorwärtsdeklaration einer namenlosen Struktur?



  • gibt es eine Möglichkeite eine Vorwärtsdeklaration für eine "namenlose" Struktur zu machen

    z. B.
    Implementierungsdatei.c

    typedef struct {
    	int x;
    } Foo;
    

    Headerdatei.c

    #ifndef FOO_H
    #define FOO_H
    
    // Vorwärtsdeklartaion von der Struktur...?
    
    #endif // FOO_H
    


  • Deklarieren heißt, einen Namen bekanntmachen. Wie machst du das bei etwas, dass keinen Namen hat?



  • ich hab ja ein Alias dafür - kann ich damit keine Vorwärtsdeklaration machen?

    in etwas so:
    typedef Foo;

    der Compiler sagt dann oh Foo ist ein Alias für die Namenlose Struktur - also soll Foo dem hier entsprechen: struct { int x};

    dachte so etwas würde vielleicht gehen

    dann mach ich halts so:

    Implementierungsdatei.c

    typedef struct Bar {
    	int x;
    } Foo;
    

    Headerdatei.h

    #ifndef FOO_H
    #define FOO_H
    
    typedef struct Bar Foo;
    
    #endif // FOO_H
    


  • Wieso Bar und nicht beidesmal Foo?



  • irgendwie kommt mir

    typedef struct Bar Foo;
    

    komisch vor - der Compiler mekert zwar nicht aber ich bin mir nicht sicher was dieser Ausdruck genau bedeutet - ich wollte nur eine Vorwärtsdeklartion meiner Struktur haben und dem Compiler klar machen, dass diese Struktur auch unter dem Namen Foo bekannt ist

    aber in meine Implementierungsdatei habe ich auch schon

    typedef struct Bar {
        int x;
    } Foo;
    

    dieses typedef - da hab ich doppelt gemoppelt - oder?



  • Bashar schrieb:

    Wieso Bar und nicht beidesmal Foo?

    Verstehe nicht ganz was du meinst - darf der Alias Typ den gleiche Identifier wie die Struktur haben?



  • Vertexwahn schrieb:

    Verstehe nicht ganz was du meinst - darf der Alias Typ den gleiche Identifier wie die Struktur haben?

    Ja, denn Tags (also das, nach dem 'struct') haben einen anderen Namensraum als die typedef-Geschichte.



  • mmh ich hab sogar im Standard den Teil über Namensräume gelesen... *schäm*


Anmelden zum Antworten