Ответ 1
Если компиляция в режиме выпуска включает определение NDEBUG, тогда да.
См. заявить (CRT)
Я использую VC++. assert(false)
игнорируется в режиме разблокировки?
Если компиляция в режиме выпуска включает определение NDEBUG, тогда да.
См. заявить (CRT)
IIRC, assert (x) - это макрос, который не оценивает ничего, когда определен NDEBUG, который является стандартом для релизов в Visual Studio.
Макрос утверждения (по крайней мере, обычно это макрос) обычно определяется как no-op в коде выпуска. Он будет запускаться только в отладочном коде. Было сказано, что. Я работал в местах, которые определяли свой собственный макрос assert, и он срабатывал как в режиме отладки, так и в режиме release.
Меня научили использовать утверждения для условия, которое "никогда" не может быть ложным, например предварительные условия для функции.
Только если определен NDEBUG, я думаю (что будет по умолчанию для приложений Visual С++).
Я думаю, что ошибочно полагаться слишком много на точное поведение утверждения. Правильной семантикой "assert (expr)" являются:
Подробнее в http://nedbatchelder.com/text/assert.html
для GNU:
#ifdef NDEBUG
# define assert(expr) (__ASSERT_VOID_CAST (0))