首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C++手段代替NDEBUG

如何用C++手段代替NDEBUG
EN

Stack Overflow用户
提问于 2021-11-24 07:41:45
回答 1查看 194关注 0票数 1

因此,我使用预处理器宏NDEBUG为我的调试生成启用一些检查。但是我想用C++常量替换它,以便在noexept子句和static if中使用它。我知道我也许能做到这样:

代码语言:javascript
复制
// in constants.hpp

#ifdef NDEBUG
constexpr bool ndebug = true;
#else
constexpr bool ndebug = false;
#endif

但是使用NDEBUG,您可以向编译器提供-D NDEBUG标志,但是对于某些文件,您可以手动指定#undef NDEBUG。因此,部分代码将使用NDEBUG编译,而部分将在没有它的情况下编译。因此,即使在一个翻译单元中,也会有具有定义的NDEBUG的部分和没有它的部分。

是否可以使用C++方法设计出完全符合此行为的内容,以便在每个头文件中都有基于NDEBUG的值的编译时bool常量。

当然,您可以在每个文件中创建具有不同名称的常量,如果这是唯一的方法,您至少可以在某种程度上自动化这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-24 09:30:35

如果使用变量或函数,如果将文件与NDEBUG定义的文件或未与这些变量/函数混合使用,则可能会发生ODR冲突。

不过,您可以声明一个具有匹配NDEBUG存在值的宏。

代码语言:javascript
复制
#ifdef NDEBUG
# define NDEBUG_VALUE true
#else
# define NDEBUG_VALUE false
#endif

在noexept子句和静态if中使用它

但仍然值得关注,因为ODR违规行为可能会很快发生。

所有定义都应相同。

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

https://stackoverflow.com/questions/70092277

复制
相关文章

相似问题

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