0

标准规范(ANSI/C89/C99)是否有任何预定义标志用于 C 编译器中的调试模式编译?

我知道DEBUGNDEBUG标记,但我不确定它们是否符合 C 标准。

4

2 回答 2

3

否 -NDEBUG标准中使用是否定义来确定assert扩展的内容,但没有任何关于导致它被定义的原因。至少在我的记忆中,根本没有任何关于任何名字的东西DEBUG

于 2011-06-16T04:52:16.587 回答
3

这真的取决于你所说的 - “调试模式编译”。它对不同的人可能意味着很多不同的事情:

  1. 没有优化,所以代码可以更容易调试
  2. 调试符号生成,再次帮助调试器
  3. assert函数的使用
  4. 使用调试库编译,执行额外的运行时检查
  5. 使用其他自定义调试技术

NDEBUG仅控制子弹#3 。当然,它经常与其他人结合使用,因为将它们一起使用是有意义的。但是没有什么会强迫您使用所有这些 - 您可以定义这些东西的各种组合,例如使用断言检查优化构建等。

于 2011-06-16T07:40:57.853 回答