Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
27.03.2002, 19:13
King2500



hi all

weiß jemand worin der unterschied besteht ob ich ne struktur so definiere:

struct
{
// blablabla....
} meinestruktur;

oder so:

typedef struct
{
// blablabla....
} meinestruktur;

ich weiß schon dass man mit typedef eigene typen definieren kann. aber was das bei ner struktur bringen soll kapier ich nich....

weiß das zufällig jemand? danke!

--

Webmaster @ Half-Life Portal

zum Seitenanfang zum Seitenende Profil || Suche
001
27.03.2002, 20:43
Kriz



Also, zuerst die Struktur an sich und ihre Bestandteile:
Quellcode:struct NAME_DER_STRUKTUR
{
....int x;
};

NAME_DER_STRUKTUR Trallalla;
Trallalla.x = 1000;

Soweit verständlich, oder?

Mit typedef gibt man einem Datentyen einen Aliasnamen, unter dem der Datentyp auch angesprochen werden kann. Im Falle einer struct heißt das:
Quellcode:typedef struct
{
....int x;
} NAME_DER_STRUKTUR;

NAME_DER_STRUKTUR Trallalla;
Trallalla.x = 1000;

Der Unterschied ist ersichtlich: Mit typedef erfolgt die Namensgebung am Ende der Struktur, ohne typedef direkt hinter dem Schlüsselwort struct. Das liegt daran, daß die Syntax für typedef so aussieht:

typedef <DATENTYP> <ALIASNAME>;

Der Datentyp ist in diesem Falle das struct + Block an sich und der Aliasname eben NAME_DER_STRUKTUR.

Die generelle Syntax für struct sieht dagegen so aus:

struct <NAME> { ... } <OPTIONALES OBJEKT>;

Hier bekommt die Struktur bereits ihren Namen. Am Ende hinter dem Block kann man entweder sofort ; schreiben oder bereits ein Objekt der Struktur deklarieren (OPTIONALES OBJEKT).

Benutzt du also typedef, dann kannst du nicht sofort ein optionales Objekt der Struktur erzeugen. Das geht nur wenn man struct als solches definiert. Btw. kann man in C afaik nur mit "typedef struct" eine Struktur erzeugen, da C die direkte Definition einer Struktur nicht kennt.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)


Dieser Beitrag wurde am 27.03.2002 um 20:46 von Kriz bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
27.03.2002, 20:51
King2500



dann nehm ich doch leichter die erste methode...

oder bringt das 2. irgendwie vorteile?

--

Webmaster @ Half-Life Portal

zum Seitenanfang zum Seitenende Profil || Suche
003
27.03.2002, 20:54
Kriz



Nein, die zweite braucht man nur bei C...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)


Dieser Beitrag wurde am 27.03.2002 um 20:54 von Kriz bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
27.03.2002, 23:22
Hellfire



Kriz:
das geht in C auch:
Quellcode:
struct strukturname
{
    int    x;
};
struct strukturname trallala;
trallala.x     = 1;

--

zum Seitenanfang zum Seitenende Profil || Suche
005
28.03.2002, 01:57
Kriz



Aber anscheinend nicht bei jedem C Compiler... Zumindest hatte ich damals mal irgendeinen asseligen DOS-Compiler von Borland, der wollte structs nur mit typedef akzeptieren.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)


Dieser Beitrag wurde am 28.03.2002 um 01:59 von Kriz bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
29.03.2002, 00:20
Prefect



Auf Grund der Namespaceaufteilung von C muß man, wenn man eine struct verwendet, auch immer das struct-Keywort vorne hinstellen. Mit anderen Worten:

Quellcode:
struct foo {
    int bar;
};

foo    a; /* illegal */
struct foo a; /* legal */

In C++ ist das im Zuge der struct/class-Gleichmacherei nicht mehr so ;)

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
007
31.03.2002, 23:22
static_caster



hm, was bedeutet dann

typedef BOOL (CALLBACK* LPFNCCSTYLEA)(HWND hwndParent, LPCCSTYLEA pccs);

oder

typedef DWORD (FAR PASCAL *LPCLIPPERCALLBACK)(LPDIRECTDRAWCLIPPER lpDDClipper, HWND hWnd, DWORD code, LPVOID lpContext );

?

--

zum Seitenanfang zum Seitenende Profil || Suche
008
01.04.2002, 00:01
KillerDoc



Das sind typedefs für Funktionszeiger

typedef BOOL (CALLBACK* LPFNCCSTYLEA)(HWND hwndParent, LPCCSTYLEA pccs);

is definiert zb LPFNCCSTYLEA als datentyp für zeiger auf eine Funktion die BOOL zurückgibt, mit der Aufrufkonvention CALLBACK und die zwei parameter von typ HWND und LPCCSTYLEA annimmt

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....


Dieser Beitrag wurde am 01.04.2002 um 00:01 von KillerDoc bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
01.04.2002, 13:57
Another1



LPFNCCSTYLEA .. MS ... und daraus soll man nu schlau werden?

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
010
02.04.2002, 00:08
TheTinySteini



Long Pointer auf ne Function, die irgendwas mit nem CCSTYLEA macht. KA was das is. Cosmic Concert Style Advice vielleicht >:O

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche