在头文件中使用 __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/