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

Assert (false) игнорируется в режиме выпуска?

Я использую VC++. assert(false) игнорируется в режиме разблокировки?

4b9b3361

Ответ 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))