C编译器中是否有调试模式编译标志的标准?

时间:2011-06-16 04:49:16

标签: c debugging compiler-construction standards compiler-flags

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

这实际上取决于你所说的 - “调试模式编译”。对不同的人来说,这可能意味着许多不同的事情:

  1. 没有优化,因此代码可以更容易调试
  2. 调试符号生成,再次帮助调试器
  3. 使用assert功能
  4. 使用调试库进行编译,进行额外的运行时检查
  5. 使用其他自定义调试技术
  6. NDEBUG仅控制子弹#3。当然,它经常与其他人结合使用,因为将它们结合使用是有意义的。但没有什么能迫使你使用所有这些 - 你可以定义这些东西的各种组合,例如使用断言检查优化构建等。