2011-10-27 26 views
5

Tôi tự hỏi tại sao trên MacOSX macro __unix__ không được xác định.Macro phổ biến để xác định hệ thống có nguồn gốc UNIX? (Linux, OSX, BSD, ...)

MacOSX có phải là dẫn xuất BSD UNIX không?

Nếu tôi xác định macro __unix__ trong mã của mình, tôi có thể gặp một số sự cố không?

Nói chung, khi kiểm tra nền tảng hiện tại, tôi thích làm một cái gì đó như:

#ifdef __unix__ 
... 
#endif 

thay vì:

#if defined(__unix__) || defined(__APPLE__) || defined(__linux__) || defined(BSD) ... 
... 
#endif 

lựa chọn tốt nhất có thể được để xác định vĩ mô của riêng tôi trong một đơn địa điểm? Ví dụ .:

#if defined(__unix__) || defined(__APPLE__) || defined(__linux__) || defined(BSD) ... 
#define UNIX_ 
#endif 
+1

Nếu bạn chọn làm điều đó, không sử dụng dấu gạch dưới kép trong tên. –

+1

bạn sẽ nhận được nhiều hơn về vấn đề của mình nếu bạn thay đổi một trong các thẻ thành 'c'. Chúc may mắn. – shellter

+0

@WilliamPursell: đã sửa. Cảm ơn bạn. – Pietro

Trả lời

4

POSIX đòi hỏi _POSIX_VERSION phải được xác định trong <unistd.h> (còn truy cập qua sysconf(_SC_VERSION)), vì vậy hãy thử đó.

+0

Ok, nhưng trước khi bao gồm Tôi phải kiểm tra xem tôi có đang sử dụng hệ thống POSIX hay không, nếu không tệp đó sẽ không có sẵn. Và không được là một tệp nhỏ để bao gồm ... – Pietro

+0

Vâng, '' phải xác định 'L_ctermid' trên POSIX ... – ninjalj

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