5

मैं वर्तमान में एक क्रॉस-प्लेटफॉर्म सी एप्लिकेशन विकसित कर रहा हूं। क्या कोई कंपाइलर मैक्रो है जो केवल विंडोज़ पर संकलन के दौरान परिभाषित किया गया है, इसलिए मैं #ifdef कुछ विंडोज विशिष्ट # शामिल कर सकता हूं?यह निर्धारित करना कि विंडोज या अन्य सिस्टम पर संकलन करना

विशिष्ट उदाहरण WinSock और बर्कले सॉकेट हेडर के बीच का चयन किया जाता है:

#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 

तो बात मैं तलाश कर रहा हूँ की तरह है कि _WINDOWS मैक्रो कुछ है।

उत्तर

10

आपका सबसे अच्छा शर्त

_WIN32 

उपयोग करने के लिए यह guaranteed to be defined है जब एक 32-बिट या 64-बिट Windows मंच के लिए संकलन विज़ुअल सी ++ संकलक का उपयोग कर रहा है। मैं विंडोज़ के लिए अन्य कंपाइलर्स को भी परिभाषित करने की अपेक्षा करता हूं (इंटेल सी ++ कंपाइलर इसे परिभाषित करता है, जैसा कि मिनजीडब्ल्यू जीसीसी करता है)।

+0

और 64-बिट Windows के मामले में क्या हुआ? मुझे लगता है कि _WIN32 केवल 32 बिट सिस्टम पर परिभाषित किया गया है, है ना? – NumberFour

+2

32 वास्तव में इसे विंडोज के प्राचीन 16-बिट संस्करणों से अलग करने के लिए है। Win64 में उस परिभाषा को हटाने से बहुत अधिक चीज़ें टूट गईं, इसलिए इसे छोड़ने में कम परेशानी थी। –

संबंधित मुद्दे