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