首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合NDEBUG -安全吗?

混合NDEBUG -安全吗?
EN

Stack Overflow用户
提问于 2019-08-13 06:24:15
回答 1查看 171关注 0票数 1
  1. 考虑一个在my_lib.amy_prog中编译的与my_lib.a链接的my_prog头文件。库是在没有NDEBUG的情况下编译的,而my_prog是用NDEBUG编译的。它会导致ODR违规吗?
  2. 如果my_lib.so是一个共享库呢?当然,ODR在这里是不相关的,因为有两个单独的可执行文件,但是NDEBUG是否会影响std (或其他)类,从而阻止它们通过SO接口正确地传递它们的实例?例如,如果std::vector实例是在my_prog中创建的,那么它是否可以作为参数传递给SO?NDEBUG会影响内存分配等吗?

标准是否指定了这一点?

EN

回答 1

Stack Overflow用户

发布于 2019-08-13 06:31:17

20.5.2.2头using.headers

  1. 翻译单元可以按任何顺序包括库头(第5条)。每一个都可以包含不止一次,与被包含一次没有什么不同,除了每次包含<cassert><assert.h>的效果取决于NDEBUG的词汇电流定义之外。

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

6.2单定义规则basic.def.odr

  1. 如果类函数/enum/variable/etc的定义满足以下要求,则可以有多个定义:

..。D的每个定义都应包含相同的令牌序列

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57472181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档