Форум программистов, компьютерный форум CyberForum.ru

assert.h - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
03.02.2012, 21:18     assert.h #1
Как понять часть после "||"? Оно выводит на экран, или куда то еще записывает ?
C++
1
assert(value == 0 || !"Value not good")
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
03.02.2012, 21:27     assert.h #2
если value != 0, во время исполнения программа аварийно завершится с выводом сообщения
Assertion failed: value == 0 || !"Value not good", file файл, line № строки
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
03.02.2012, 21:44     assert.h #3
retmas,

Не по теме:

без пруда не выловишь рыбку и с трудом = Без рыбки, сколько не прудись, напрасен будет труд

Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,129
Записей в блоге: 26
04.02.2012, 15:09     assert.h #4
Весь этот изврат сделан только для того, чтобы в печати засветить строку "Value not good". Чтобы не лазить в исходники программы и не смотреть, что за код был написан в файле таком-то, строке такой-то.

Технически это выражается в то, что строковой литерал как бы является указателем (непустым), а над указателем допустима операция !. Таким образом логическое выражение !"abc" всегда равно true и потому на результат вычисления выражения в assert'е не влияет, но компилятор при построении кода его удаляет как мёртвый код (по правилу "x | 1 == x"). Т.е. с одной стороны в коде не остаётся никаких дополнительных проверок, с другой стороны в печати засвечивается требуемая строка (потому что всё выражение, стоящее внутри assert'а, попадает в печать)

Добавлено через 2 минуты
Подразумевается, что вместо ничего не значащей фразы "Value not good" в коде написано что-то более осмысленное, помогающее понять смысл данного assert'а.
Yandex
Объявления
04.02.2012, 15:09     assert.h
Ответ Создать тему
Опции темы

Текущее время: 13:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru