Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

1

22.08.2009, 22:58

typedef

Ich hab mal (wieder) ne Frage: Im Petzold wird öfters typedef benutzt, aber ich verstehe nicht was typedef bewirkt.

Ich hoffe, mir kann das jemand gut erklären.

mfg C--
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

Iljaronaldo

Treue Seele

Beiträge: 99

Wohnort: Hadamar

Beruf: Schüler[9.Klasse Realschule]

  • Private Nachricht senden

2

22.08.2009, 23:23

Das würde mich auch mal interessieren:)
tutti colpevole, nessuno colpevole. - Wenn einer Schuld ist, sind Alle Schuld.
Die Mafia ist wie ein Staat. Sie mordet nicht, Sie richtet hin.

Wenn man zwei Stunden lang mit einem Mädchen zusammensitzt, meint man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen Ofen, meint man, es wären zwei Stunden. Das ist Relativität. (Albert Einstein)

Mein System

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

22.08.2009, 23:27

typedef sagt dem compiler, dass er ein alias für einen typen erstellen soll.

Beispiel:

Quellcode

1
2
3
4
typedef int integer;

int a = 3;
integer b = 3;


Für den compiler sind nun diese beiden Zeilen das selbe, da integer intern durch ein int ersetzt wird.

Das spart zum Beispiel Tipparbeit bei container klassen

Quellcode

1
2
3
map< string, string > StringMap;

map< string, string >::iterator it = StringMap.begin();


Dieses ewige getippe von "map< string, string >::iterator" lässt sich vermeiden indem man ein typedef für den iterator definiert:

Quellcode

1
2
3
typdef map< string, string >::iterator StringMapIterator;

StringMapIterator it = StringMap.begin();

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

4

22.08.2009, 23:34

Danke für die schnelle Antwort! :D

Noch ne Frage, geht dann auch sowas:

C-/C++-Quelltext

1
2
3
4
5
6
typedef struct Point{int x, int y}; Punkt;

...

Punkt p1;
Point p2;

?
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

5

22.08.2009, 23:40

Probiers doch einfach aus ;-) (kompilieren)

Ob das mit der deifition im typedef direkt klappt, ka, sieht aber auch nicht sehr schön aus.

Das hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
struct Point{int x, int y};
typedef  Point Punkt;

...

Punkt p1;
Point p2; ]

geht aber auf jeden Fall.
Lieber dumm fragen, als dumm bleiben!

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

6

22.08.2009, 23:53

Typdefs sind vorallem wichtig und sehr nützlich wenn man mit Funktions-Pointern arbeitet:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Simples Beispiel:

void Use(int line, bool realy)
{
  if(realy)
    cout << line;
}

// Anstatt:


void (*pFunc)(int, bool) = &Use;

// macht man:


typedef void (*FuncType)(int, bool);

FuncType pFunc = &Use;


Vorallem wenn man "FuncType" öfters braucht, was meistens der Fall ist,
sind typedefs sehr nützlich...

Alles weitere steht hier:
http://www.cpp-tutor.de/cpp/le08/typedef.html

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

22.08.2009, 23:57

Zitat von »"C--"«

Noch ne Frage, geht dann auch sowas:


Nicht ganz aber fast, so wärs richtig:

C-/C++-Quelltext

1
typedef struct Point{int x, int y} Punkt;


Sowas sieht man oft in C code (z.B.: in den Headern der WinAPI). Das hat den Grund dass man das struct in C immer zum Typ schreiben muss:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct Point
{
  int x;
  int y;
};


// ...


struct Point p1;  // <-- "struct" muss da hin

struct Point p2;

p1.x;
p2.y;


// ...


void blub(struct Point *p)  // <-- "struct" muss da hin

{
  p->x = 0;
}



Ein typedef verspricht da Linderung:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
struct Point_
{
  int x;
  int y;
};

typedef struct Point_ Point;


// ...


struct Point_ p1;
Point p2;  // jetzt gehts wie in C++ auch


p1.x;
p2.y;


// ...


void blub(Point *p)
{
  p->x = 0;
}


Und um sich den temporären Namen zu sparen kann mans auch gleich zusammenfassen:

C-/C++-Quelltext

1
2
3
4
5
typedef struct
{
  int x;
  int y;
} Point;


In C++ sind derartige Konstrukte aber überflüssig und lediglich aus Kompatiblitätsgründen zulässig...

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

8

23.08.2009, 00:00

Bei sowas

C-/C++-Quelltext

1
typedef struct Point {int x; int y;}Punkt;

klappts

Zitat von »"Jonathan_Klein"«

Probiers doch einfach aus (kompilieren)


Bin nicht mehr ganz wach :oops:

EDIT: Danke für die vielen Antworten, ich habs verstanden. :D
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

Werbeanzeige