Определение того, будет ли компилироваться в Windows или другой системе - PullRequest
5 голосов
/ 05 апреля 2010

Я сейчас разрабатываю кроссплатформенное приложение C . Есть ли какой-нибудь макрос компилятора, который определяется только во время компиляции в Windows, поэтому я могу #ifdef некоторые специфичные для Windows #include?

Типичным примером является выбор между заголовками сокетов WinSock и Berkeley:

#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 макроса.

Ответы [ 3 ]

10 голосов
/ 05 апреля 2010

Лучше всего использовать

_WIN32

гарантированно будет определено при компиляции для 32-битной или 64-битной платформы Windows с использованием компилятора Visual C ++. Я ожидаю, что другие компиляторы для Windows также определят его (компилятор Intel C ++ определяет его, как и MinGW gcc).

3 голосов
/ 05 апреля 2010
2 голосов
/ 05 апреля 2010
_WIN32  

Определено для приложений для Win32 и Win64. Всегда определен.

_WIN64  

Определено для приложений для Win64.

Источник: Список предопределенных макросов реализации ANSI C и Microsoft C ++.

...