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

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

本文关键字:是否 定义 符号 1900 tm      更新时间:2023-10-16

在这个答案中,我正在初始化一个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

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

答案是no标准中没有定义值。。。至少没有一个是公开的。

mktime的这个实现中,TM_YEAR_BASE被定义为1900,这是文件中唯一出现的1900,尽管TM_YEAR_BASE继续被使用了6次。

在Visual Studio上,我搜索了time.h,它的includes(crtdfs.h和time.inl)1900只在注释中。

我认为这项研究是指以下其中一项:

  1. 1900未在标准中公开定义
  2. 1900是公开定义的,但未被修改tm的代码使用
  3. 1900是在标准的一些实现中公开定义的,但不是全部

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

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