我有相当多的代码,在开发版本中运行良好,代码中有许多assert()
。我通过传递给g ++的-DNDEBUG
指令禁用了断言,现在我的代码中断了seg。故障。有什么东西我不知道assert()?
答案 0 :(得分:7)
断言我知道的最常见问题是在断言本身中包含具有副作用的代码。使用-DNDEBUG进行编译时,断言基本上已被注释掉,因此断言内的代码不会被执行。断言手册页在错误部分提到了这一点:
BUGS
assert() is implemented as a macro; if the expression tested has side-
effects, program behavior will be different depending on whether NDEBUG
is defined. This may create Heisenbugs which go away when debugging is
turned on.