tm中使用的值1900是否定义为符号?

Is the value 1900 used in tm defined as a symbol?

中,我正在像这样初始化一个 tm

tm a{0, 0, 0, 15, 5, 2006 - 1900};

使用纯数字有点不清楚,但我发现它比以下更清晰:

tm a{0, 0, 0, 15, 5, 106};

我想要的是如果标准中有一个符号定义为 1900 我可以使用,因为最容易理解的是这样的:

tm a{0, 0, 0, 15, 5, 2006 - TM_YEAR_ORIGIN};

我必须在本地定义它还是在标准中定义这样的东西?

C99 标准没有定义这样的常量,它为 C 和 C++ 指定了 tm

我不能说它是否在任何地方定义。

答案是没有标准中没有定义值...至少没有public唯一可用的值。

this implementation of mktimeTM_YEAR_BASE 定义为 1900,这是文件中唯一出现的 1900,尽管 TM_YEAR_BASE 继续使用了 6 次。

在 Visual Studio 我搜索了 time.h 它包括(crtdefs.h 和 time.inl)1900 仅在评论中。

我认为这项研究意味着以下之一:

  1. 1900 未在标准public中定义
  2. 1900 是 public 定义的,但未被修改 tm
  3. 的代码使用
  4. 1900 public仅在标准的某些实现中定义,但并非全部

这些选项中的任何一个都意味着即使可以找到针对 1900 的 public 定义,它也不能跨平台使用。

作为 OP,我会说我的决定是在内部定义 TM_YEAR_BASE 并使用它。