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

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

1

30.11.2006, 19:10

typedef ....

(Wenn jemand befindet, das ist mehr Offtopic, bitte verschieben.)

In letzter Zeit stört mich, dass so viele verschiedene Variablentypen bei mir im Code gameln, wo es eigentlich meitens die selben sind. DWORD und unsigned int sind zb ja das Selbe.
Klar bin ich selber Schuld .... ich sollt halt entweder das eine oder das andere nehmen. Aber ich bin recht unentschloßen. Daher meine Frage ....

Für was gibt es eigentlich die ganzen Typedefs wie DWORD, WORD oder auch lächerliche wie FLOAT?

Und außerdem hab ich bemerkt, dass ich womöglich einiges an Speicher verschwenden würde, wenn ich das selbe Programm in einer 64bit Umgebung kompilieren würde. Weil da ist ja afaik einige Datentypen größer (welche eigentlich?).

Auch hab ich mir überlegt ob vieleicht nicht auch sowas sinnvoll wäre:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
typedef signed char s8;
typedef unsigned char   u8;
typedef signed short    s16;
typedef unsigned short  u16;
typedef signed int s32;
typedef unsigned int u32;
typedef signed __int64 s64;
typedef unsigned __int64 u64;
typedef float f32;
typedef double f64;


Denn so könnte man die Typedefs einfach ändern, wenn man auf einem System Kompiliert, wo andere Variablengrößen vorherschen.

Was meint ihr dazu?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

30.11.2006, 19:39

naja ich halt nix davon ^^.

Ich persöhnlich nutze nur Schlüsselwörter, als Typen wie unsigned short etc. DWORD u.s.w. gibts ned (is dann eben unsigned long). Komme auch so ganz gut damit zurecht.

Manchmal benutze ich typedefs für Template Definitionen wie z.B.

C-/C++-Quelltext

1
typedef Matrix<signed long, 3, 3> IntergerMatrix3x3;


Aber da muss jeder selbst wissen. Nur man sollte auch beachten, das der Code ja gut Wartbar sein soll. Wenn man überall mit s8 u.s.w. arbeitet muss jmd. der sich nicht auskennt schon ne weile blättern.

3

30.11.2006, 19:42

Zitat

DWORD und unsigned int sind zb ja das Selbe.

Ok ... erstmal fängt man einen Thread nicht mit einer Lüge an ... DWORD ist immer noch als unsigned long definiert ... unter win32 wohl gemerkt ...

Naja ... guck dir mal genau an als was ULONG und als was DWORD usw definiert sind ... unter Win64 und Win32 ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Anonymous

unregistriert

4

30.11.2006, 19:44

Gibt es ja , beim DS zb wirds genau so gemacht da man bei 4MB Ram keinen Platz zum verschwenden frei hat.

Quellcode

1
2
3
4
5
6
typedef struct{
    s32 x, y;
    s32 vy; // used for jumping...
} mariotype;
 
mariotype mario;


cu

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

30.11.2006, 19:52

@Abrexxes das hat aber wohl eher etwas mit der Sprache bzw. Faulheit zu tun:

Code

C-/C++-Quelltext

1
2
3
4
typedef struct bla
{
...
} blub;


Benutzung in C:

C-/C++-Quelltext

1
2
3
4
5
6
7
struct bla x; // ohne typedef

....

// oder


blub x; // mit typedef

...


Benutzung in C++

C-/C++-Quelltext

1
2
3
4
5
bla x; // ohne typedef


...

blub x; // mit typedef

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

6

30.11.2006, 19:59

Zitat

Ok ... erstmal fängt man einen Thread nicht mit einer Lüge an ... DWORD ist immer noch als unsigned long definiert ... unter win32 wohl gemerkt ...


oh sry hab mich verschrieben :oops:

Anonymous

unregistriert

7

30.11.2006, 20:09

Nein es geht rein um den Speicherverbrauch (ohne mal auf überflüssige Syntax Diskussionen einzugehen)

Unsigned Signed
8 bits 0 → 255 -128 → 127
16 bits 0 → 65 535 -32 768 → 32 767
32 bits 0 → 4 294 967 295 -2 147 483 648 → 2 147 483 647

Es gibt halt noch Systeme wo man sich mit den limitierten Resourcen abfinden muss und nicht auf Gbytes an Ram gesegnet ist. Wenn ich nur 500 ints laufen habe die alle mit 0-255 ausreichend Dimensioniert sind, dann brauch die PC fassung 8 mal mehr Speicherplatz auf einer 64bit Kiste. Den verschwenderischen Luxus kann man sich bei 4096kb Arbeitsspeicher nicht leisten.

cu

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

01.12.2006, 10:35

Re: typedef ....

Zitat von »"Wümpftlbrümpftl"«


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
typedef signed char s8;
typedef unsigned char   u8;
typedef signed short    s16;
typedef unsigned short  u16;
typedef signed int s32;
typedef unsigned int u32;
typedef signed __int64 s64;
typedef unsigned __int64 u64;
typedef float f32;
typedef double f64;



Im Grund sind solche Typendefinitionen schon sinnvoll, z.B. wenn es um die Übersicht im Code geht. Da will ich nicht unbedingt unsigned long long o.ä. lesen.

Es ist aber vorallem sinnig wenn man für verschiedene Plattformen mit unterschiedlichen Typengrößen programmiert. Und genau an dieser Stelle sollte man vorsichtig mit den Bezeichnern sein! ;) Nicht das man ein Objekt von Typ s8 (in der Hoffnung auf 8 bit signed) erstellt und plötzlich hat man 16 Bit, oder 32, oder sonstwas!

grüße

grüße
@D13_Dreinig

Werbeanzeige