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

Anonymous

unregistriert

1

11.08.2003, 15:30

Warum ist #define schlecht?

dtsa

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

11.08.2003, 15:36

Man kann nicht pauschal sagen, dass es schlecht ist!
Für Debug-Zwecke ist es wunderbar geeignet wie z.B. Asserts, die dann in der Release-Version einfach "wegdefiniert" werden.

3

11.08.2003, 17:21

Du meinst wohl #define-Kosnatnten und const-Konstanten?
Ganz einfach, #define-Konstanten sind nicht typensicher.
Ein Gespenst geht um in Europa...

Anonymous

unregistriert

4

12.08.2003, 01:26

Ncoh ne Frage; denke mal, es lohnt sich nicht nen neuen Thread aufzumachen:

Warum sind void-Pointer schlecht?

5

12.08.2003, 06:07

Weil damit ganz Böse Dinge passieren können.

Quellcode

1
2
3
4
char c = '\n';
void* p = &c;
....
D3DVECTOR3* pv = (D3DVECTOR3*)p;
Das sind dann auch immer die besten Fehler ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

MAG

Frischling

Beiträge: 37

Wohnort: Berlin / Brandenburg

Beruf: Angehender Student

  • Private Nachricht senden

6

14.08.2003, 17:59

Ja ok, da können böse dinge geschehen. Aber manchmal sind die ganz Praktisch, wenn man zB im Voraus noch nicht genau weiß, auf welche Art von Objekt der Zeiger zeigen soll.
Ich würde ja gerne die Welt verändern, aber Gott gibt mir den Quelltext nicht!

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

14.08.2003, 18:03

wie oft hatten wir jetzt das #define thema? Ich glaub schon mindestens 5x oder? ???

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

8

15.08.2003, 16:10

Einen void Pointer kann man in den meisten Fällen durch templates (siehe verkette Listen) oder durch gemeinsame Eltern Klassen von dennen die möglichen Klassen abgeleitet sind umgehen.

Das mit den gemeinsamen Basisklassen kannste dir so vorstellen:
( Beispiel (Netzwerk Übertragung) )

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
enum PACKETID // Welche Art von Packet?
{
 PACKETID_GENERIC       = 0, // Eltern Klasse.
 PACKETID_PLAYERINFO  = 1, // Eine abgeleitete Klasse...
 PACKETID_LEVELDATAS = 2 // noch ne abgeleitete Klasse.
};

class GENERIC_PACKET
{
 protected:
 USHORT ID;
 USHORT Size;

 public:
 //....
};

class PLAYERINFO_PACKET : public GENERIC_PACKET
{
 private:
 USHORT Energie;
 USHORT xPos,yPos;
 //....
};

class LEVELINFO_PACKET : public GENERIC_PACKET
{
 BYTE RawData;
 //...
};

/* So könnte man dann casten: wenn man übern Netzwerk ein Packet enthält geht man erstmal davon aus das man die Basisklasse erhält mit größe und ID */
GENERIC_PACKET AusDemNetzWerkStream;
switch(AusDemNetzWerkStream.ID)
{
 case PACKETID_PLAYERINFO:
 PLAYERINFO_PACKET PInfo = (PLAYERINFO_PACKET)AusDem...;
 //...
}


Hoffe du kannst dir das jetzt ein wenig vorstellen.
Der Code ist wahrscheinlich total durcheinander und unschön aber hier gehts nur ums Verständnis. Das casten sollte man mit den C++ casts machen und nicht mit diesen C Hacks. ;)

Ciao DarthB

Werbeanzeige