c++ - 使用 `__DATE__` 或 `__TIME__` 是否违反单一定义规则?

标签 c++ datetime c-preprocessor one-definition-rule

在头文件中使用 __DATE____TIME__ 时,该头包含的预处理器的结果可能会有所不同。

什么情况下在头文件中使用__DATE____TIME__会违反单一定义规则?

作为后续:assert header 是否违反了单一定义规则?

最佳答案

如果__TIME__对于不同的翻译单元给出不同的结果,那么它不能用在跨翻译单元需要相同结果的上下文中。这意味着例如将对象(例如类成员)初始化为 __TIME__ ,其中该初始化程序是包含在多个翻译单元中的 header 的一部分,这将是有问题的。

__DATE__如果您开始新的构建,则不太可能为不同的翻译单元提供不同的结果,但增量构建(仅重新编译已更改的文件的构建)确实也可能成为问题。

assert是一个宏,其扩展方式取决于 NDEBUG是在包含其 header 时定义的,因此整个项目必须就是否 NDEBUG 达成一致。应该定义,或者 header 中定义的函数应避免使用 assert .

关于c++ - 使用 `__DATE__` 或 `__TIME__` 是否违反单一定义规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41258104/

相关文章:

c++ - 关于使用 memcpy 将表达式值复制到指针的查询

c++ - GNU g++ 4.9.2 查找函数调用的编译错误

c++ - 双向链表添加元素

c# - 如何知道给定的字符串是否是有效的 UTC DateTime 格式?

c# - 当 ASP.Net 收到具有 DateTime 属性的已发布模型时,什么决定了 DateTime.Kind?

C++ 连接宏定义

c++ - vector 上的 push_back 调用导致的段错误(线程 linux)

csv - SSIS 将空白日期时间列转换为 NULL 并解析输入

c++ - 如果编译器是 MSVC,是否定义了预处理器定义?

c++ - C中的 "inactive"预处理器 block 是什么意思?