Ich versuche immer, aus dem Hauptcode, um die Plattform Besonderheiten zu halten, indem es auf diese Weise
tun
platform.h:
#if BUILD_PLATFORM == WINDOWS_BUILD
#include "windows_platform.h"
#elif BUILD_PLATFORM == LINUX_BUILD
#include "linux_platform.h"
#else
#error UNSUPPORTED PLATFORM
#endif
someclass.c:
void SomeClass::SomeFunction()
{
system_related_type t;
// Other code
platform_SystemCall(&t);
// Other code
}
Jetzt in windows_platform.h
und linux_platform.h
Sie typedef system_related_type
auf den systemeigenen Typ und entweder #define platform_SystemCall
als systemeigener Aufruf oder erstellen Sie eine kleine Wrapper-Funktion wenn das von einer Plattform auf die andere gesetzte Argument zu unterschiedlich ist.
Wenn sich die System-APIs für eine bestimmte Aufgabe zwischen Plattformen stark unterscheiden, müssen Sie möglicherweise eine eigene Version-API erstellen, die die Unterschiede aufteilt. In den meisten Fällen gibt es jedoch ziemlich direkte Zuordnungen zwischen den verschiedenen APIs unter Windows und Linux.
Anstatt sich auf einen bestimmten Compiler #define zu verlassen, um die Plattform auszuwählen, definiere ich BUILD_PLATFORM in der Projektdatei oder im Makefile, da diese sowieso für jede Plattform eindeutig sein müssen.
Es gibt eine Gotcha ist, wenn sie mit Win32/Win64 bedingter Kompilierung zu tun - wenn für Win64 Kompilieren Sie werden feststellen, dass _WIN32 ist so definiert, Test gegen _WIN64, bevor Sie Test (!) gegen _WIN32 –