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

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

11

01.09.2015, 17:41

Ohne die Diskussion gelesen zu haben:
Ja, die Typen sind immer gleich groß und es gibt sie für PC-Entwickler immer. Selbst Microcontroller und relativ exotische Plattformen arbeiten heutzutage mit Bytes.
Früher gab es wohl Großrechnerarchitekturen mit anderen Eigenschaften, aber die sind zum Glück ausgestorben.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (01.09.2015, 19:26)


12

01.09.2015, 17:43


Das mit dem Austauschen der Datentypen (also der Definition vom Typedef) ist doch ziemlich interessant; ich habe das jedoch bisher meist mit #define umgesetzt

8o 8|
Nein, bitte nicht. Sag nicht du machst das mit #define :D

13

01.09.2015, 19:24

Das stößt doch spätestens bei Templates aber an seine Grenzen.

MfG
Check

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

02.09.2015, 05:00

#define sollte man generell meiden, insbesondere in C++, wo es für fast alles, wo man #define verwenden könnte, bessere Alternativen gibt. So ziemlich die einzige Ausnahme ist bedingte Kompilierung und selbst da kann man bis zu einem gewissen Punkt mit Templates operieren...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

02.09.2015, 09:55

#define ist auch praktisch, um Makros für Debugging zu definieren, in denen man Fehler-/Log-Meldungen mit Dateinamen, Funktionsnamen und Zeilennummer anreichern möchte.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

16

02.09.2015, 10:37

Soweit ich das sehe, scheint dann Epic Games mit ihrer Unreal Engine "ziemlich schlechte" C++ Programmierer zu sein. Da wird das recht extensiv genutzt, um Metadaten für Klassen zu generieren. Templates finde ich jetzt nicht wirklich besser, sind sogar meiner Meinung nach viel schlechter zu lesen. Und damit kann man sich ja fast genauso schlimm in die Nesseln setzen oder? Daher finde ich das "generell" falsch.

Davids Anwendungsfall finde ich auch sehr passend, dafür nutze ich es auch.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

17

02.09.2015, 13:37

Soweit ich das sehe, scheint dann Epic Games mit ihrer Unreal Engine "ziemlich schlechte" C++ Programmierer zu sein. Da wird das recht extensiv genutzt, um Metadaten für Klassen zu generieren.

Das was Epic Games da mit der Unreal Engine baut, geht meiner Meinung nach in eine andere Richtung als C++ Software. Im Prinzip bauen die sich ihre eigene Programmiersprache, die dann über einen selbstgebauten Compiler + Preprozessor nach C++ compiliert wird. So hat C++ auch mal angefangen, als es nach C compiliert wurde. Immerhin haben sie eigene Keywords, eigene Vererbungsregeln, einen Garbage Collector, Reflection und nutzen eine eigene Standardbibliothek statt der von C++.

Für Textersetzungen ist der Preprozessor und damit die Defines natürlich geeignet. Das sehe ich aber auch als etwas anderen Use Case als die Programmierung.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

18

02.09.2015, 13:57

Defines haben definitiv ihre Anwendungsbereiche. Plattformspezifische und Compilerspezifische Funktionen kann man am einfachsten mit Defines auswählen. Templates sind dafür ungeeignet und ich muss TrommlBomml teilweise zustimmen. Ich halte es auch für fragwürdig, #define zu vermeiden, bloß weil es #define heißt und "böse" sein soll. Defines haben ganz klar ihre negativen Seiten aber es gibt auch Positive. Im Falle von Typdefinitionen ist hauptsächlich störend, dass DEFINES IMMER GROẞGESCHRIEBEN sein müssen, damit sie nicht mit den anderen Namen kollidieren. Außerdem gibt es keine Namensräume für Makros womit lange Präfixe notwendig sind.

Es gibt allerdings nach wie vor eine unglaublich lange Liste von Dingen bei denen #define die beste Lösung ist.
Von bedingter Kompilierung und Plattformspezfischen Code und einfachen Dingen wie #define THREADLOCAL __declspec(thread) über Reduzierung der Tipparbeit bis zu Dingen wie das Generieren von "MetaDaten" bzw. Reflection-Informationen. Als Beispiel für ein wahnsinniged Präprozessorkonstrukt gibt es in meinen Code zum Beispiel Makros um die unzähligen Abkömlinge von glUniform und den ganzen Extensions und das in ein Template zu bekommen, dass für einen gegebenen C++-Typ automatisch die richtige Funktion aufruft. Ohne Präprozessor wären das tausende Zeilen Glue-Code die noch viel schwerer zu warten wären als 300 Zeilen Präprozessorhölle.

19

07.09.2015, 10:03

Ich würde aber empfehlen, typedefs nur sparsam zu verwenden, und nicht für jede Kleinigkeit eine ganzes Set neuer Typen zu kreieren. Denn wenn man versucht, fremden Code zu lesen und auf ein typedef stößt, weiß man erstmal nicht, ob es jetzt beispielsweise einfach nur ein Integer oder irgend ein komplexes Index-Objekt ist, in dem noch irgendetwas interessantes passiert. Zu viele Abstraktionsebenen können Übersicht halt auch wieder zerstören.
Lieber dumm fragen, als dumm bleiben!

20

08.09.2015, 15:06

Naja, moderne IDEs bieten beim Mouseover schon jede Information, die man benötigt. Zusätzlich kann man meistens zur Definition springen und sich den Quelltext genauer anschauen.
Aber prinzipiell ist es doch egal, ob hinter einem typedef ein int steckt oder ein komplexer Typ, so lange ich damit konsequent und logisch arbeiten kann.

Werbeanzeige