_POSIX_TIMERS 的可能值是多少?

What are the possible values of _POSIX_TIMERS?

posixoptions manpage 显示以下宏可用于确定主机对 posix 计时器的支持程度 API:

在我的开发系统上(Ubuntu-based Linux 发行版,使用 gcc 7.5.0),_POSIX_TIMERS 计算为 200809_POSIX_CPUTIME0_POSIX_THREAD_CPUTIME0

我一直在搜索有关这些宏的更多信息,但似乎找不到所需的信息。我想知道它们在哪里定义(在头文件中?还是由编译器 "magically" 定义?),以及 _POSIX_TIMERS 的可能值是什么。

但是,我对一些 C 代码执行了 运行,这些代码将 _POSIX_TIMERS 与另一个以 2012 开头的常数进行比较。所以显然各种不同的值必须是可能的。

POSIX定义(2018版)说:

_POSIX_TIMERS

The implementation supports timers. This symbol shall always be set to the value 200809L.

the <unistd.h> header中定义。

当(由实现而不是您)定义时,这些 功能测试宏 扩展为 long.

类型的整型常量

如果未定义或0L,则不支持该功能。 否则值为 YYYYMM,表示相应标准发布的年份和月份。

这个想法是开发人员可以使用条件编译来测试特定版本或版本集中是否存在特定功能。并使其面向未来,以便开发人员可以表达 "I need at least the 2012 version of this feature, 2008 is not enough".