Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как рабоатет кусочек кода? 
:(
    Опции темы
Andrey88
Дата 15.2.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.11.2006

Репутация: нет
Всего: нет



#define X_ASSERT(x) ((void)0)  - есть такой кусок кода...

вызвается так X_ASSERT(FALSE);

Что это значит и как работает? Сам я что-то никак не додумаюсь...

Это сообщение отредактировал(а) Andrey88 - 15.2.2007, 18:57
PM MAIL   Вверх
JackYF
Дата 15.2.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Andrey88 @  15.2.2007,  18:56 Найти цитируемый пост)
#define X_ASSERT(x) ((void)0)  - есть такой кусок кода...


Что-то я не понял, при чем тогда параметр x?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Andrey88
Дата 15.2.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.11.2006

Репутация: нет
Всего: нет



И я не понял. Вот смотрю и удивляюсь чего забугорские программеры пишут...
PM MAIL   Вверх
azesmcar
Дата 16.2.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Andrey88
там только это написано? Может он в отдельных случаях разные макросы определяет..ну например
Код

#ifdef _DEBUG
#define X_ASSERT(x) //что-то другое
#else
#define X_ASSERT(x) ((void)0)
#endif


Хотя согласен, на первый взгляд маразмом кажется
PM   Вверх
V.A.KeRneL
Дата 16.2.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 1
Всего: 14



Вообще-то это заглушка [макроса (в данном случае)] в чистом виде. 
И встречается обычно в библиотеках так, как показал azesmcar.

Иногда ещё пишут (я в частности) так: 
Код

#ifdef _DEBUG
#    define X_ASSERT(x)   // Актуальная проверка (дебаг).  Например, assert((x) == 0);  //
#else
#    define X_ASSERT(x)   /* empty */
#endif



Это сообщение отредактировал(а) V.A.KeRneL - 16.2.2007, 12:49


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
Andrey88
Дата 17.2.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.11.2006

Репутация: нет
Всего: нет



Это заглушка. Я действительно не весь код выложил... Это релизная заглушка. В дебаге - стоит сишный ассёрт. Код не мой - мне надо было пофиксить баг. А в итоге я вычислил, что разработчики и сами не очень то рубят, как должна работать программа в этом случае, вот и выставили ассёрт. В релизе происходит терминация всех модулей (но с ликами)...

Вот и думаю я, что напишу им, что это архитектурная бага и пусть сами её фиксят....
PM MAIL   Вверх
Earnest
Дата 18.2.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(Andrey88 @  15.2.2007,  19:56 Найти цитируемый пост)
вызвается так X_ASSERT(FALSE);

Сам ты "архитектурная бага"  smile 
Это значит, что разработчики хотели показать, что сюда выполнение ни в коем разе придти не должно.
Если пришло, значит, что-то пошло не так, как они предусамтривали.
В резизе просто валится - вас, как говорится, предупреждали.
Вопрос в том, почему этот код получает управление - вот в этом и разбирайся.

Добавлено @ 18:14 
Другое дело, что приличные люди обычно в таких местах комментарии пишут...


--------------------
...
PM   Вверх
Anikmar
Дата 18.2.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Earnest @  18.2.2007,  18:13 Найти цитируемый пост)
Это значит, что разработчики хотели показать, что сюда выполнение ни в коем разе придти не должно.

Хреновые разработчики, на мой взгляд. 
Писать заглушку - дешево и сердито, вместо того, чтобы нормально отработать ошибочную ситуацию. (ИМХО)
PM MAIL ICQ   Вверх
Любитель
Дата 18.2.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Ничего подобного - ассерты это один из приёмов разработки ПО. "Программирование  по контракту" - как сие говорят. Ассерты говорят о понимании программером условий в некоторой точке кода.


--------------------
PM MAIL ICQ Skype   Вверх
Earnest
Дата 19.2.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Anikmar, всякие ситуации бывают.
Вот, скажем, если ты в MFC пишешь Owner-draw control и забыл написать свою функцию DrawItem, вызовется стандартная, а там тебя встретит ASSERT(0) с комментарием...
Кроме того, не путай обработку ошибок при функционировании программы с ошибками нарушения соглашений разработки. Скажем, пишешь ты switch с кучей кэйзов. В большинстве случаев очень желательно поставить ASSERT(0) на default - чтобы когда кто-то где-то добавит еще один тип чего-нибудь, не забыли поменять в том числе и этот switch. 


--------------------
...
PM   Вверх
Andrey88
Дата 19.2.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.11.2006

Репутация: нет
Всего: нет



Этот баг висит уже семь месяцев... До меня дошёл с пол месяца назад...

При неправильных данных ассёрт. Вроде как для отладки. Но вот неправильные данные приходят из-за архитектурной недоработки. Механизм сигналинга между модулями - неверно срабатывает...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1096 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.