是否使用“ __Date__”或“ __Time__”违反了一个定义规则



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

在标题文件中使用__DATE____TIME__在哪些情况下违反了一个定义规则?

作为后续行动:assert标头是否违反了一个定义规则?

如果__TIME__给出了不同的翻译单元的不同结果,则不得在翻译单元中需要相同结果的上下文中使用它。这意味着例如将对象(例如类成员)初始化为__TIME__,其中该初始评估是包含在多个翻译单元中的标头的一部分,这将是有问题的。

__DATE__如果您启动新的构建,但增量构建,只会重新编译更改的文件,则不太可能为不同的翻译单元提供不同的结果。

assert是一个宏,根据何时包括NDEBUG的定义方式,其扩展不同,因此整个项目都必须同意是否应定义NDEBUG,或者在标头中定义的功能应避免使用assert

一个定义规则仅适用于变量,函数,类型,枚举或模板(例如3.2节,ISO/IEC 14882,1998 C 标准)。__DATE____TIME__都是扩展到字符串文字的预定义宏 - 这不是一个定义规则适用于。

assert()也是预处理器宏。如果其扩展定义了变量,函数,类型,枚举或模板,则如果该定义在翻译单元之间有所不同,则其使用可能违反一定的定义规则。务实地,很难设想实现将具有扩展到这种定义的 assert()宏的情况。

相关内容

  • 没有找到相关文章

最新更新