Кто использует проверенный макрос MFC? - PullRequest
3 голосов
/ 23 июля 2010

Думая ... я годами счастливо программировал в загадочной среде MFC, используя ASSERT () всякий раз, когда это казалось нормальным, и только сегодня я наткнулся на макрос VERIFY: http://msdn.microsoft.com/en-us/library/fcatwy09%28v=VS.71%29.aspx

Это в основном то же самое, что и ASSERT (), за исключением того, что выражение не будет удалено в сборках релиза (будет check , но выражение все равно будет оцениваться).

#ifdef _DEBUG
#define VERIFY(f)          ASSERT(f)
#else   // _DEBUG
#define VERIFY(f)          ((void)(f))

Я вижу несколько вариантов его использования, но мне было интересно, регулярно ли другие используют его в своей кодовой базе и видел ли кто-нибудь какие-либо неблагоприятные побочные эффекты от его использования.

веселит.

Ответы [ 3 ]

3 голосов
/ 24 июля 2010

Когда я занимался программированием MFC, я использовал его все время.

По сути, все, что возвращает что-то, от чего я обычно слишком ленив, чтобы проверить возвращение, но на что Линт потом жалуется, я бы завернул в ПРОВЕРКУ. (Звонит как :: CloseHandle, например)

Не может быть никаких неблагоприятных побочных эффектов от использования его в выпущенном продукте, так как в любом случае это неактивная версия сборки.

2 голосов
/ 25 февраля 2011

Во время моего первого выступления по программированию 15 лет назад мне удалось значительно ускорить существующий проект.Они имели тонны ASSERT с в своем коде, но полагались на побочные эффекты.Это означало, что они могли собирать только отладочные сборки, и их программа перестала работать в режиме выпуска.Я просто заменил все ASSERT s на VERIFY s.

1 голос
/ 25 февраля 2011

Скажем, у вас есть такой код:

  ...
  const int optional_return_value = AnyOldFunctionOrMethod(params);
  ASSERT(optional_return_value == 42);
}

Это даст warning C4189: 'optional_return_value' : local variable is initialized but not referenced в сборке релиза.

Макрос VERIFY может избежать этого, либо выполнив вызов функции +проверить в одной строке в макросе VERIFY (например, будет предложено в его ответе ) или просто использовать VERIFY вместо ASSERT в строке проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...