我最近收到了一个使用__DARWIN_C_LEVEL
的补丁。我认为提供它的人使用OS X 10.10。
我有OS 10.9,10.8和10.5进行测试,但似乎都没有定义它。
10.5 :
$ uname -a
Darwin PowerMac.home.pvt 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:57:01 PDT 2009;
root:xnu-1228.15.4~1/RELEASE_PPC Power Macintosh
$ cpp -dM < /dev/null | grep -i darwin
$
10.8 :
$ uname -a
Darwin riemann.home.pvt 12.6.0 Darwin Kernel Version 12.6.0: Wed Mar 18 16:23:48 PDT 2015;
root:xnu-2050.48.19~1/RELEASE_X86_64 x86_64
$ cpp -dM </dev/null | grep -i darwin
$
它有很多点击率,但它要么是苹果公司的源代码,要么是某人的补丁。 Confer,"__DARWIN_C_LEVEL" site:opensource.apple.com。
Apple会像这样使用它,但我不清楚他们想要实现的目标:#if __DARWIN_C_LEVEL > __DARWIN_C_ANSI
#define _POSIX_ARG_MAX 4096
#define _POSIX_CHILD_MAX 25
...
#endif
什么是__DARWIN_C_LEVEL
,应该如何使用?
答案 0 :(得分:3)
在<sys/cdefs.h>
中,您会找到:
/*
* Set a single macro which will always be defined and can be used to determine
* the appropriate namespace. For POSIX, these values will correspond to
* _POSIX_C_SOURCE value. Currently there are two additional levels corresponding
* to ANSI (_ANSI_SOURCE) and Darwin extensions (_DARWIN_C_SOURCE)
*/
#define __DARWIN_C_ANSI 010000L
#define __DARWIN_C_FULL 900000L
#if defined(_ANSI_SOURCE)
#define __DARWIN_C_LEVEL __DARWIN_C_ANSI
#elif defined(_POSIX_C_SOURCE) && !defined(_DARWIN_C_SOURCE) && !defined(_NONSTD_SOURCE)
#define __DARWIN_C_LEVEL _POSIX_C_SOURCE
#else
#define __DARWIN_C_LEVEL __DARWIN_C_FULL
#endif
因此__DARWIN_C_LEVEL
将是有效的_POSIX_C_SOURCE值(看起来像199808L
之类的日期),或者它将是超出范围010000L
和900000L
内涵的两个值显然,很多不那么积极,而且更多的是后缀。
_ANSI_SOURCE
已定义,__DARWIN_C_LEVEL
将为010000L
; _POSIX_C_SOURCE
已定义,则为_DARWIN_C_SOURCE
和_NONSTD_SOURCE
__DARWIN_C_LEVEL
不是_POSIX_C_SOURCE
,__DARWIN_C_LEVEL
将是什么
900000L
的值是;