Bedingte Kompilierung.



  • Hallo,

    ich habe eine Frage und zwar, in meinem Buch wird eine Codezeile
    einmal so geschrieben:
    ifdef __unix__ || __linux__

    und einmal so:
    ifdef __unix__ || linux

    im zweiten Fall befindet sich "linux" nicht zwischen Unterstrichen.

    Könnt Ihr mir bitte sagen worin der Unterschied liegt, und wozu diese
    Unterstriche überhaubt gut sind.

    Vielen Dank!

    Grüße,
    Tutorialfresser



  • Hallo,

    diese Unterstriche signalisieren, dass der Bezeichner vom Compiler benutzt bzw. reserviert ist, daher solltest du auch niemals Variablen mit zwei Unterstrichen am Anfang deklarieren.

    In diesem Fall gibt es keinen Unterschied zw. __linux__ und linux, sie bedeuten beide das selbe. Ählich verhält es sich z.B. mit WIN32, Win32 usw. Hier haben sich über die Zeit einfach einige Makros zuviel gebildet, vewrmutlich aus Rückwärtskompatibilität 😉

    MfG

    GPC



  • Die Namen "__linux__" und "linux" sind zwei völlig verschiedene Bezeichner - ob und welcher davon von deinem Compiler definiert wird, kann dir nur dessen Doku sagen (beide gehören nicht zum Standard).

    PS: Die Konstruktion "#ifdef __unix__ || __linux__" ist imho sowieso Käse - mit #ifdef kannst du nur einzelne Symbole kontrollieren, für kompliziertere Konstrukte benötigst du "#if defined(__unix__) || defined(__linux__)"



  • @TutorialFresser: Hab dir hier noch eine Übersicht über die vordefinierten Makros: http://predef.sourceforge.net/index.php

    MfG

    GPC



  • Vielen Dank!

    Grüße,
    Tutorialfresser



  • Ich kompiliere gern mal mit fünf verschiedenen Umgebungen, sowohl verschiedene Comiler wie auch abwechselnd unter Win32 und Linux. Aber wer entscheidet jetzt darüber, was "Standard" ist?
    Unter Linux definiert GCC ja z.B. __linux__ und ich habe das auch in diversen anderen Quellcodes gefunden, jetzt heißt es aber, das sei kein Standard.
    Und wenn ich mir die Tabellen von diesem sourceforge-Projekt so anschaue sieht das teilweise sehr lückenhaft aus, d.h. es fehlen Symbole oder die Beschreibung ist dürftig.

    Wenn jemand also ein paar gute Argumente oder einen besseren Link hat möchte ich gern die "Standards" in Zukunft benutzen.

    Gruß,
    Cris


Anmelden zum Antworten