2010-04-05 23 views
5

Tôi hiện đang phát triển một ứng dụng C đa nền tảng. Có macro trình biên dịch nào được xác định chỉ trong khi biên dịch trên Windows, vì vậy tôi có thể #ifdef một số #includes cụ thể của Windows không?Xác định liệu biên dịch trên Windows hoặc hệ thống khác

ví dụ điển hình là lựa chọn giữa WinSock và ổ cắm Berkeley tiêu đề:

#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 

Vì vậy, điều tôi đang tìm kiếm là một cái gì đó như thế _WINDOWS vĩ mô.

Trả lời

10

Tốt nhất là sử dụng

_WIN32 

Đó là guaranteed to be defined khi biên dịch cho một 32-bit hoặc 64-bit nền tảng Windows bằng cách sử dụng Visual C++. Tôi mong đợi các trình biên dịch khác cho Windows cũng định nghĩa nó (trình biên dịch C++ của Intel định nghĩa nó, cũng như gcc MinGW).

+0

Và những gì trong trường hợp của Windows 64-bit? Tôi đoán _WIN32 được định nghĩa chỉ trên các hệ thống 32 bit, phải không? – NumberFour

+2

32 thực sự ở đó để tách nó khỏi phiên bản Windows 16 bit cũ. Việc loại bỏ định nghĩa đó trong Win64 sẽ phá vỡ quá nhiều thứ, vì vậy sẽ ít rắc rối hơn khi bỏ nó vào. –

Các vấn đề liên quan