gpt4 book ai didi

c++ - 如何做出健壮的断言?

转载 作者:行者123 更新时间:2023-11-30 02:48:31 27 4
gpt4 key购买 nike

我想实现这个行为:

  • 当程序在 Debug模式下运行时,assert_robust(expression, commands) 的工作方式与经典的 assert(expression) 完全相同
  • 当程序以 Release模式运行时,如果表达式为假,assert_robust(expression, commands) 执行一些commands

这可以通过这种方式完成:

#ifdef NDEBUG
#define assert_robust(expression, command) if (!(expression)) command;
#else
#define assert_robust(expression, command) assert(expression);
#endif

例如,这可以用来使 myfunction 容错:

char myfunction(const string& s, int i)
{
assert_robust(i >= 0, return '\0');

/* Normal code */
}

这很好用,但是如何使宏 assert_robust 支持多个(任意)命令? (最好通过标准的 C++ 方式)

另一个问题是:

debug严格,release仁慈是好事吗?

编辑:我的想法是,为什么要做这样的事情是因为如果它是程序中的错误实际上要好得多,程序有时会维护一些奇怪的东西,而不是当它崩溃并且用户失去他们的时候数据。

最佳答案

比较有意思的是第二个问题:

Is it good thing to be strict in debug and benevolent in release?

我的经验是,在调试和发布版本中有不同的行为是一个可怕的想法。您正在注册生产中的问题,您将永远无法在调试版本中重现,因为两者的行为不同。

除此之外,如果您首先在 Debug模式下断言,您可能会声称这不会成为问题,断言应该用于标记编程问题,即您无法安全恢复的情况。如果您可以在 Release模式下安全地恢复,为什么要在 DEBUG 中断言?如果不能,您是否愿意以一种您不太了解它会做什么的方式摆弄生产数据?

关于c++ - 如何做出健壮的断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21974645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com