Есть ли стандарт компиляции в режиме отладки в компиляторе C? - PullRequest
0 голосов
/ 16 июня 2011

Существует ли какой-либо предварительно определенный флаг по стандартной спецификации (ANSI / C89 / C99) для компиляции режима отладки в компиляторе C?

Я знаю флаги DEBUG и NDEBUG, но я не уверен, что они в стандарте C или нет.

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Это действительно зависит от того, что вы называете - «компиляция режима отладки». Это может означать много разных вещей для разных людей:

  1. нет оптимизаций, поэтому код легче отлаживать
  2. генерация символов отладки, снова для помощи отладчику
  3. использование функции assert
  4. компиляция с отладочными библиотеками, которые выполняют дополнительную проверку во время выполнения
  5. использование других пользовательских методов отладки

NDEBUG контролирует только пулю # 3. Конечно, это часто сочетается с другими, потому что имеет смысл использовать их вместе. Но ничто не заставляет вас использовать их все - вы можете определять различные комбинации этих вещей, например, оптимизированная сборка с проверкой утверждений и т. д.

3 голосов
/ 16 июня 2011

Нет - определяется ли NDEBUG или нет в стандарте, чтобы определить, к чему расширяется assert, но нет ничего о том, что вызывает его определение.По крайней мере, насколько я помню, ничего с именем DEBUG вообще нет.

...