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
。
我不能说它是否在任何地方都有定义。
答案是no标准中没有定义值。。。至少没有一个是公开的。
在mktime
的这个实现中,TM_YEAR_BASE
被定义为1900,这是文件中唯一出现的1900,尽管TM_YEAR_BASE
继续被使用了6次。
在Visual Studio上,我搜索了time.h,它的includes(crtdfs.h和time.inl)1900只在注释中。
我认为这项研究是指以下其中一项:
- 1900未在标准中公开定义
- 1900是公开定义的,但未被修改
tm
的代码使用 - 1900是在标准的一些实现中公开定义的,但不是全部
这些选项中的任何一个都意味着,即使可以找到1900的公共定义,也不能跨平台使用。
作为OP,我要说的是,我的决定是在内部定义TM_YEAR_BASE
并使用它。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- sprintf(b, "%" ) 是否定义了?
- 重载虚拟行为是否定义良好?
- 它是否定义了哪些算法可以接受可变 lambda 的实现?
- 如何检查是否定义了固定宽度的整数
- &*NULL 在C++中是否定义良好?
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 将以"_[a-z0-9]"开头和"using"的标识符导入全局命名空间是否定义良
- SFINAE 检测是否定义了类型
- 标准是否定义了共同基础?
- 根据是否定义了另一个宏来评估宏
- 获取未初始化对象成员的地址是否定义良好?
- 如何测试是否定义了结构的成员 (c++)
- 如何测试标准库中是否定义了 std::remove_cvref
- 对非活跃的工会成员使用"std::addressof"是否定义明确
- C++模板 - 几个专业 - 行为是否定义?
- 如何检查是否定义了标头保护
- C++14 是否定义了无符号 int 的填充位上的按位运算符的行为
- C / C++中无符号整数的减法和比较是否定义良好?
- 在比较中使用已强制转换为另一种类型的函数指针是否定义良好?