2010-04-05 11 views
5

Şu anda çapraz platform C uygulama geliştiriyorum. Sadece Windows üzerinde derleme sırasında tanımlanan herhangi bir derleyici makro var, bu yüzden bazı Windows özgü #includes #ifdef yapabilir miyim?Windows veya diğer sistemlerde derleme yapılıp yapılmayacağını belirleme

Tipik örnek WinSock ve Berkeley yuva başlığı arasındaki seçmektir:

#ifdef _WINDOWS 
    #include <winsock.h>  
#else 
    #include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <sys/un.h> 
    #include <arpa/inet.h> 
    #include <netdb.h> 
#endif 

yüzden arıyorum şey _WINDOWS makro gibi bir şeydir.

cevap

10

Yapabileceğiniz en iyi şey, Visual C++ derleyici kullanarak 32-bit veya 64-bit Windows platformu için derleme zaman guaranteed to be defined olduğunu

_WIN32 

kullanmaktır. Windows için başka derleyicilerin de bunu tanımlamasını beklerdim (MinGW gcc gibi Intel C++ derleyici bunu tanımlar).

+0

Ya 64-bit Windows durumunda? _WIN32'nin sadece 32 bit sistemlerde tanımlandığını farz ediyorum, değil mi? – NumberFour

+2

32, Windows'un eski 16 bit sürümlerinden ayırmak için gerçekten orada. Win64'te bu tanımın kaldırılması çok fazla şey kırmıştı, bu yüzden onu bırakmak daha az zordu. –

İlgili konular