#ifndef mit WIN64
-
Guten Morgen zusammen,
wie gestern auch schon gestern in diesem Forum geschrieben, versuche ich zurzeit ein altes C Programm zu kompelieren.Das Programm ist damals für Windows und Linux geschrieben worden. Dementsprechend gibt es in den Headerfiles z.B. folgende Zeilen:
#ifndef WIN32 #include <ump/osname.h> #endif #ifdef WIN32 #define NO_INDEX #define NO_BZERO #define NO_FTRUNCATE #define NO_SOCKADDR_UN #define UMP_LOCAL_IPC IPC_mem #endif
Nun ja unter Windows 32bit wird das ganze ja nicht aufgerufen, aber wenn man nun das ganze auf Windows 64bit kompeliert wird holt er sich natürlich den Header "osname" rein. In diesem stehen aber Linux spezifische Sachen, ergo wirft er Fehler.
Nun zu meiner Frage: Gibt es so etwas wie WIN32 auch für Windows 64?
Bei Google habe ich nur folgende Definitionen gefunden: WIN64, _WIN64 aber beide funktionieren nicht.
-
Komm auf die IDE und den Compiler an.
Bei Visual Studio wird WIN32 zum Beispiel auch für 64Bit Projekte definiert.audacity363 schrieb:
Bei Google habe ich nur folgende Definitionen gefunden: WIN64, _WIN64 aber beide funktionieren nicht.
Nimm "WIN32", so dass du die Header nicht verändern musst, und stell dein Projekt so ein dass dieses Makro definiert ist wenn du für Windows kompilierst.
So ein predefined Makro wäre wohl das einfachste.
-
Okey danke. Ich benutze keine IDE zum kompelieren, dies tue ich auf der Konsole und benutze den gcc.
Gut dann habe ich nun ein neues Stichwort zum Googlen.
-
Bei Visual Studio:
http://msdn.microsoft.com/de-de/library/b0084kay.aspx_WIN32
bei 32-bit und 64-bit.
_WIN64
bei 64-bit.Bei GCC kannst du so eine Liste der vordefinierten Macros bekommen:
echo . | gcc -dM -E -
Bei MinGW gibt es folgende Macros:
__MINGW32__
bei 32-bit MinGW oder bei 32-bit-Kompilierung mit MinGW-w64.
__MINGW64__
bei 64-bit-Kompilierung mit MinGW-w64.Hilfreich:
http://predef.sf.net
-
Viel Dank.
Nur zum Verständnis:
War es früher anders, das es diesen Unterstrich nicht gab oder hängt dies direkt vom Compiler ab?
-
Nein! Das war immer so.
Wie es so schön heißt:
Also, each name that contains a double underscore __ or begins with an underscore followed by an uppercase letter is always reserved to the implementation and should not be used as an identifier.
_WIN32 und _WIN64 sind entsprechend reserviert
-
welche Macros vordefiniert sind ist natürlich Compilerabhängig.
-
Martin Richter schrieb:
Nein! Das war immer so.
oenone schrieb:
welche Macros vordefiniert sind ist natürlich Compilerabhängig.
Okey, weil in allen Headerfiles wird WIN32 ohne Unterstrich abgefragt, dann hat der Kollege von damals sich den Compiler dementsprechend konfiguriert.