将tm中使用的值1900定义为符号吗?

时间:2015-03-30 11:48:07

标签: c++ date time c-preprocessor standard-library

this answer我正在初始化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};

我是否必须在本地定义或在标准中定义?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

答案是标准中没有定义的值...至少没有公开可用的值。

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

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

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

  1. 1900未在标准中公开定义
  2. 1900是公开定义的,但未被修改tm
  3. 的代码使用
  4. 1900是在标准的某些实现上公开定义的,但不是全部
  5. 这些选项中的任何一个都意味着即使可以找到1900的公共定义,也无法跨平台使用它。

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