Taşınabilir bir C++ uygulaması yazıyorum. Çalıştığı işletim sistemine bağlı olarak farklı başlıkları nasıl ekleyebilirim. Bunu C++ 'da yapmanın bir yolu var mı yoksa yapı sistemini kullanmak zorunda mıyım? Önişlemci ileİşletim sistemime göre farklı başlıkları nasıl ekleyebilirim?
cevap
:
Biz Linux (Red Hat Enterprise 5), Sun (Solaris) ve Windows üzerinde geliştirmek#ifdef _SUNOS
//code
#elseif _LINUX
//code
#elseif _HPUX
//code
#elseif _WIN32
//code
#else
#error OS not supported
#endif
İşte bir [önceden tanımlanmış makrolar listesi] (http://predef.sourceforge.net/preos.html). – roshanvid
@ c0smikdebris: teşekkür ederim :) – BlackBear
_WIN32'nin hem 32 bit hem de 64 bit Windows'ta tanımlandığını unutmayın. – user763305
.
#ifndef MSWINDOWS
#include <unistd.h>
#else
#include <winbase.h>
#endif
//More includes here
Ben önişlemci direktifleri ve çapraz platform inşa sistemi gibi CMake kullanırsınız: Sistemimiz böyle bir şey kullanmaktır. Sen yapabilirdi: -DLINUX
:
#ifdef LINUX
#include <unistd.h>
#elif defined(WINDOWS)
#include <algorithm.h>
# elif Defined(MAC_OSX)
//... etc.
#else
#error No operating system defined
#endif
Sonra gibi bir yapı için gelen önişlemci bayrağı ekleyin.
Bence bu iyi bir fikir. Son zamanlarda derleyicilerin kullandığı tanımları kullanarak bunu yapmaya çalıştı ama ben vazgeçtim, çok fazla varyasyon var ve değil. Yapı sistemiyle belirlenen kendi tanımımı kullanmanın daha kolay olduğunu keşfettim. – Skurmedel
İşte oldu. Bana hatırlattığın için teşekkürler. – roshanvid
Rica ederim. Ama * lütfen * bunu yapı sisteminde yapın, yazılımınızı daha iyi korunabilir hale getirecektir. Modüller platformdan bağımsız bir şekilde yazılmazsa (genellikle Boost veya Qt gibi kütüphanelerle olabilirler), OS özümleri üzerinde kendi soyutlamalarınızı tasarlayabilir ve bunları birkaç kez uygulayabilirler. –
Tüm iyi cevaplar. Maalesef, açık olduğunu söylüyordum, ancak genellikle platformlar olan üstbilgileri ve kitaplıkları tercih etmenin iyi bir fikir olduğunu aklımda tutarım. [C++ Standart Kütüphanesi] (http://en.wikipedia.org/wiki/C%2B%2B_standard_library) ihtiyacınız olan her şeye sahip olduğunda, neden bir alternatif seçeceğinizi kendinize sorun. –