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

S4My

unregistriert

11

06.07.2012, 12:19

Hi, ist jetzt schon eine Weile her das hier etwas geschrieben wurde, jedoch denke ich das noch etwas fehlt. Und zwar:

_DEBUG gibt nicht direkt wieder ob ein Projekt gerade im Debug- oder Release-Mode kompiliert wird. _DEBUG gehört wie auch zB. _cplusplus zu den von MS Visual Studio bereit gestellten Makros, zumindest wenn man deren Infoseite zu diesem Thema glauben schenken mag. _DEBUG ist definiert sofern folgende Einstellungen aktiviert sind:
Projekteigenschaften->Konfigurationseigenschaften->C/C++->Codegenerierung->Laufzeitbibliothek: entweder /LDd, /MDd oder /MTd.
Somit gibt _DEBUG also eigentlich nur die aktuell ausgewählten Laufzeitbibliotheken wieder, nicht aber den Build-Mode.

So, nun ist klar das diese bei Projekten so eingestellt sind das dies nur im Debug-Mode der Fall ist, weshalb man auch ohne Probleme darauf zurückgreifen kann. Stellt man dies jedoch um so kann man nicht mehr garantieren das der Code zu 100% die Wahrheit sagt. Vermutlich ein Grund warum bei dem assert-Makro auf NDEBUG zurückgegriffen wurde.

Wer sich vom dem jedoch selbst überzeugen möchte kann ruhig hier reinschauen:http://msdn.microsoft.com/en-us/library/b0084kay.aspx

Mlg
S4My

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

12

06.07.2012, 12:29

Oder man definiert sich einfach selber etwas für jede Build-Variante und braucht nicht lange suchen welches Define das richtige ist. :rolleyes:
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (06.07.2012, 12:41)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

06.07.2012, 13:42

NDEBUG ist, was der C und damit auch C++ Standard für assert() vorsieht.

S4My

unregistriert

14

06.07.2012, 14:01

Oder man definiert sich einfach selber etwas für jede Build-Variante und braucht nicht lange suchen welches Define das richtige ist.
Ja, das ist natürlich klar ^^ . Ich hab in einer der Dokumentationen der asser.h bzw cassert Header file gelesen das der Programmierer selbst dieses Define zu erstellen hat, bevor dann die eigentliche Datei eingebunden wird. Also wie du gesagt hast.

Worum es jetzt denke ich geht ist das automatische erkennen gewisser Ereignisse ohne das ändern des Quelltextes. Das ist ja auch in dem ersten der beiden auf der Startseite sichtbaren Büchern bei der Logfileklasse gemacht worden:

C-/C++-Quelltext

1
2
3
4
5
#ifdef _DEBUG
    TextOut ( "Debug" ) ;
#else
    TextOut ( "Release" ) ;
#endif

...oder so :D .

Naja, hier könnte man denke ich noch eine Weile diskutieren, ich wollte aber jetzt eigentlich kein altes Thema wieder aufwärmen ;) .

Mlg
S4My

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

06.07.2012, 16:26

Ja, und trotzdem kann man Defines auch erstellen, ohne den Code zu ändern. Man kann solche Symbole nämlich als Compiler-Flag übergeben, zumindest bei jedem C-Derivat-Compiler, den ich kenne.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

S4My

unregistriert

16

06.07.2012, 18:07

OK, das wusste ich nicht :D .

Könntest du mal kurz erklären wie das funktioniert?

Mlg
S4My

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

06.07.2012, 19:02

Im Fall des in diesem Threads erfragten Visual Studios einfach über die Projekteinstellungen -> C/C++ -> Preprocessor -> Preprocessor Definitions (Kommando-Zeilen Option "/D"). Default-Einstellung für das Visual Studio ist für alle Debug-Builds die Option '/D "_DEBUG"'

Das geht für C# ebenfalls über die Projekt-Einstellungen.

In gcc über den Parameter "-D":
gcc -D RELEASE input.file

Über vieler solcher Parameter gebe ich im Code öfter an, welche Features oder Optionen in welchem Build nicht enthalten sein sollen: Profiling-Infos, Debug-Infos, Features (Demo-Version z.B.?), Version ohne Sound oder ohne graphische Ausgabe, etc, etc.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (06.07.2012, 19:07)


Werbeanzeige