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

Posted

技术标签:

【中文标题】C编译器中是不是有调试模式编译标志的标准?【英文标题】:Is there standard of debug mode compilation flag in C compiler?C编译器中是否有调试模式编译标志的标准? 【发布时间】:2011-06-16 04:49:16 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

    没有优化,因此可以更轻松地调试代码 调试符号生成,再次帮助调试器 assert函数的使用 使用调试库编译,执行额外的运行时检查 使用其他自定义调试技术

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

【讨论】:

C 标准中似乎没有调试模式统一概念。我理解正确吗? 正确。调试是特定于环境的,标准未涵盖【参考方案2】:

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

【讨论】:

以上是关于C编译器中是不是有调试模式编译标志的标准?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++Builder 发布模式下找到异常,但不是调试

DTrace pid 提供程序是不是仅适用于调试模式编译的程序?

Python 3.2:cx_freeze 编译我的程序,但处于调试模式

C# WPF 应用程序在发布模式下失控,但不是调试模式

gccrelease模式设置断点

Valgrind 标志,调试与发布编译