gpt4 book ai didi

c - __DARWIN_C_LEVEL C 预处理器符号是什么?

转载 作者:太空狗 更新时间:2023-10-29 16:56:24 26 4
gpt4 key购买 nike

我最近收到了一个使用 __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
$

它有很多点击率,但它要么是 Apple 源代码的 rip,要么是某人的补丁。商议,"__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,应该如何使用?

最佳答案

<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 之类的日期)或者它将是远在该范围之外的两个值 010000L900000L显然,意味着更少的 posixy 和更多的 posixy。

  • 如果_ANSI_SOURCE定义 __DARWIN_C_LEVEL将是 010000L ;
  • 否则如果_POSIX_C_SOURCE已定义,但 _DARWIN_C_SOURCE_NONSTD_SOURCE不是,__DARWIN_C_LEVEL会是什么 _POSIX_C_SOURCE s 的值为;
  • 其他 __DARWIN_C_LEVEL将是 900000L .

关于c - __DARWIN_C_LEVEL C 预处理器符号是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com