Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Используйте #define NDEBUG

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

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

NDEBUG

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

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

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

Ответ 3

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

#define NDEBUG
#include <assert.h>

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

Ответ 4

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

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

Ответ 5

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

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