как полностью отключить утверждение

c++ c assert

54394 просмотра

5 ответа

6146 Репутация автора

У меня есть полный код звонка assert(condition). В отладочной версии я использую g++ -gиспользование моего утверждения. К моему удивлению, я вижу, что утверждение работает и в моей версии выпуска, скомпилированной без -gопций.

Как я могу полностью отключить во время компиляции мое утверждение? Должен ли я явно определять NDEBUGв какой-либо сборке, которую я произвожу, несмотря на то, что они отладки, выпуска или что-то еще?

Автор: Abruzzo Forte e Gentile Источник Размещён: 18.03.2011 03:36

Ответы (5)


90 плюса

34910 Репутация автора

Решение

Вы должны #define NDEBUG(или использовать флаг -DNDEBUGс g ++ ), это отключит assert, если он определен до включения заголовочного файла assert.

Автор: GWW Размещён: 18.03.2011 03:39

10 плюса

3039 Репутация автора

Вы можете полностью отключить утверждения

#define NDEBUG
#include <assert.h>

или вы можете установить NDEBUG (через -DNDEBUG) в вашей процедуре makefile / build в зависимости от того, хотите ли вы продуктивную или dev версию.

Автор: dcn Размещён: 18.03.2011 03:39

4 плюса

294757 Репутация автора

Да, определите NDEBUGв командной строке / системе сборки опцию препроцессор / компилятор -DNDEBUG.

Это не имеет ничего общего с информацией отладки, вставленной -g.

Автор: Fred Foo Размещён: 18.03.2011 03:39

10 плюса

284652 Репутация автора

-gФлаг не влияет на работу assert, это только гарантирует , что различные отладочные символы доступны.

Настройка NDEBUG- это стандартный (как в официальном стандарте ISO) способ отключения утверждений.

Автор: Alnitak Размещён: 18.03.2011 03:40

34 плюса

73436 Репутация автора

использование #define NDEBUG

7.2 Диагностика

1 Заголовок определяет макрос assert и ссылается на другой макрос,

NDEBUG

который не определен <assert.h>. Если NDEBUG определяется как имя макроса в той точке исходного файла, в которую он включен, макрос assert определяется просто как

#define assert(ignore) ((void)0)

Утверждают макросъемки Rede определены в соответствии с текущим состоянием NDEBUG каждый раз, когда <assert.h>включается.

Автор: Prasoon Saurav Размещён: 18.03.2011 03:53
Вопросы из категории :
32x32