Seite 1 von 2

Vorwärtsdeklaration von Unions in C

Verfasst: Mi Nov 19, 2008 6:56 pm
von Kerli
Weiß jemand von euch wie ich in C eine Vorwärtsdeklaration eines Unions erstellen kann?

Ich darf für meine Aufgabe nämlich leider kein C++ verwenden :(

Re: Vorwärtsdeklaration von Unions in C

Verfasst: Mi Nov 19, 2008 10:04 pm
von Xin
Kerli hat geschrieben:Weiß jemand von euch wie ich in C eine Vorwärtsdeklaration eines Unions erstellen kann?
Was spricht gegen

Code: Alles auswählen

union bla;
?

Re: Vorwärtsdeklaration von Unions in C

Verfasst: Mi Nov 19, 2008 11:52 pm
von Kerli
Xin hat geschrieben:
Kerli hat geschrieben:Weiß jemand von euch wie ich in C eine Vorwärtsdeklaration eines Unions erstellen kann?
Was spricht gegen

Code: Alles auswählen

union bla;
?
Der Kompiler ;)

Code: Alles auswählen

ex2.c:100: Fehler: expected specifier-qualifier-list before »Primitive«
Die dazugehörige Zeile schaut so aus:

Code: Alles auswählen

Primitive *next_element_;
Primitive habe ich vorher mit

Code: Alles auswählen

union Primitive;
deklariert.

In C++ ist das kein Problem aber mit C und damit auch mit dem gcc geht das so nicht. Und in der Vorlesung wird nun einmal C verlangt.

Re: Vorwärtsdeklaration von Unions in C

Verfasst: Do Nov 20, 2008 12:05 am
von Xin
Kerli hat geschrieben:
Xin hat geschrieben:
Kerli hat geschrieben:Weiß jemand von euch wie ich in C eine Vorwärtsdeklaration eines Unions erstellen kann?
Was spricht gegen

Code: Alles auswählen

union bla;
?
Der Kompiler ;)
Glaube ich nicht ;-)
Kerli hat geschrieben:

Code: Alles auswählen

ex2.c:100: Fehler: expected specifier-qualifier-list before »Primitive«
Die dazugehörige Zeile schaut so aus:

Code: Alles auswählen

Primitive *next_element_;
Da würde ich als C-Compiler auch meckern.

Code: Alles auswählen

union Primitive * next_element_;  // <- blöde Namensgebung

Re: Vorwärtsdeklaration von Unions in C

Verfasst: Do Nov 20, 2008 12:20 am
von Kerli
Xin hat geschrieben:Da würde ich als C-Compiler auch meckern.

Code: Alles auswählen
union Primitive * next_element_; // <- blöde Namensgebung
Ohne 'union' vorne dran. Das ist ein Member eines Union.

Jetzt funktioniert es:

Code: Alles auswählen

typedef union Primitive Primitive;

typedef struct
{
  int        type_;
  char      *id_;
  Primitive *next_element_;
  Point      start_;
  Point      end_;
} Line;

// ...

union Primitive
{
  struct
  {
    int        type_;
    char      *id_;
    Primitive *next_element_;
  };
  Line       line_;
  Rect       rect_;
  Circle     circle_;
  Text       text_;
  Polygon    polygon_;
};

Re: Vorwärtsdeklaration von Unions in C

Verfasst: Do Nov 20, 2008 10:30 am
von Xin
Kerli hat geschrieben:Ohne 'union' vorne dran. Das ist ein Member eines Union.
??

Code: Alles auswählen

union Primitive;

typedef struct
{
  int        type_;
  char      *id_;
  union Primitive *next_element_;
  Point      start_;
  Point      end_;
} Line;

// ...

union Primitive
{
  struct
  {
    int        type_;
    char      *id_;
    union Primitive *next_element_;
  };
  Line       line_;
  Rect       rect_;
  Circle     circle_;
  Text       text_;
  Polygon    polygon_;
};
sollte genauso gehen. Ich persönlich mag Typedef nicht.

Re: Vorwärtsdeklaration von Unions in C

Verfasst: Do Nov 20, 2008 12:29 pm
von Kerli
Xin hat geschrieben: Kerli hat geschrieben:Ohne 'union' vorne dran. Das ist ein Member eines Union.
??
Das hat sich auf
Xin hat geschrieben:union Primitive * next_element_; // <- blöde Namensgebung
bezogen.
Xin hat geschrieben:

Code: Alles auswählen

union Primitive;

typedef struct
{
  int        type_;
  char      *id_;
  union Primitive *next_element_;
  Point      start_;
  Point      end_;
} Line;

// ...

union Primitive
{
  struct
  {
    int        type_;
    char      *id_;
    union Primitive *next_element_;
  };
  Line       line_;
  Rect       rect_;
  Circle     circle_;
  Text       text_;
  Polygon    polygon_;
};
sollte genauso gehen. Ich persönlich mag Typedef nicht.
Ich mag typedef eigentlich auch nicht, aber in C ist das so nicht möglich.

Re: Vorwärtsdeklaration von Unions in C

Verfasst: Do Nov 20, 2008 1:20 pm
von Xin
Kerli hat geschrieben:
Xin hat geschrieben:sollte genauso gehen. Ich persönlich mag Typedef nicht.
Ich mag typedef eigentlich auch nicht, aber in C ist das so nicht möglich.
Du willst mir sagen, dass

Code: Alles auswählen

union bla;

union bla * foo;
Vom Compiler nicht akzeptiert wird?

Re: Vorwärtsdeklaration von Unions in C

Verfasst: Do Nov 20, 2008 1:58 pm
von Kerli
Xin hat geschrieben:Du willst mir sagen, dass

Code: Alles auswählen

    union bla;

    union bla * foo;
Vom Compiler nicht akzeptiert wird?
Nein ich will sagen, dass

Code: Alles auswählen

union bla;

union bla2
{
  bla * p;
};
nicht vom Compiler akzeptiert wird.

Er erlaubt anscheinend keine Member die nicht mit typedef definiert worden sind.

Re: Vorwärtsdeklaration von Unions in C

Verfasst: Do Nov 20, 2008 2:11 pm
von Xin
Kerli hat geschrieben:Er erlaubt anscheinend keine Member die nicht mit typedef definiert worden sind.
Das ist klar, weil das nicht C entspricht.
Du kannst ja auch nicht

Code: Alles auswählen

struct bla;

struct bla2
{
  bla * p;
};
definieren.

Dass Classes und Structs in C++ direkt als Typ definiert werden ist in C nicht so. Und Unions werden afaik nirgendwo implizit als Typ definiert.