Vorwärtsdeklaration von Unions in C

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Vorwärtsdeklaration von Unions in C

Beitrag von Kerli » Mi Nov 19, 2008 6:56 pm

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 :(
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Vorwärtsdeklaration von Unions in C

Beitrag von Xin » Mi Nov 19, 2008 10:04 pm

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;
?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Vorwärtsdeklaration von Unions in C

Beitrag von Kerli » Mi Nov 19, 2008 11:52 pm

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.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Vorwärtsdeklaration von Unions in C

Beitrag von Xin » Do Nov 20, 2008 12:05 am

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
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Vorwärtsdeklaration von Unions in C

Beitrag von Kerli » Do Nov 20, 2008 12:20 am

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_;
};
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Vorwärtsdeklaration von Unions in C

Beitrag von Xin » Do Nov 20, 2008 10:30 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Vorwärtsdeklaration von Unions in C

Beitrag von Kerli » Do Nov 20, 2008 12:29 pm

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.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Vorwärtsdeklaration von Unions in C

Beitrag von Xin » Do Nov 20, 2008 1:20 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Vorwärtsdeklaration von Unions in C

Beitrag von Kerli » Do Nov 20, 2008 1:58 pm

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.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Vorwärtsdeklaration von Unions in C

Beitrag von Xin » Do Nov 20, 2008 2:11 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten