繁体   English   中英

混合 NDEBUG - 安全吗?

[英]Mixing NDEBUG - is it safe?

  1. 考虑一个C ++头文件都在编译my_lib.amy_prog与链接my_lib.a 该库是在没有NDEBUG情况下编译的,而my_prog -with NDEBUG 它会导致 ODR 违规吗?
  2. 如果my_lib.so是共享库怎么办? 当然,ODR 在这里无关紧要,因为有 2 个单独的可执行文件,但是NDEBUG会以一种会阻止通过 SO 接口正确传递它们的实例的方式影响std (或其他)类? 例如,如果在my_prog中创建了一个std::vector实例,它可以作为参数传递给 SO 吗? NDEBUG会影响内存分配等吗?

标准是否对此进行了规定?

20.5.2.2 头文件 [using.headers]

  1. 一个翻译单元可以包含任意顺序的库头文件(第 5 条)。 每个都可以被多次包含,与只包含一次没有什么不同,除了包含<cassert><assert.h>效果每次都取决于NDEBUG的词法当前定义。

保证不是标准头文件的问题,但是您突出显示的问题确实适用于您自己提供的源文件中的函数。

6.2 一定义规则[basic.def.odr]

  1. 一个类 [function/enum/variable/etc] 可以有多个定义,前提是这些定义满足以下要求:

[...] D每个定义都应由相同的记号序列组成;

请注意,标记化发生预处理之后,因此如果定义包含任何assert ,则必须将其预处理为相同的标记序列,即在编译期间必须具有相同的NEDBUG设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM