>
>
Предопределенный макрос PVS_STUDIO


Предопределенный макрос PVS_STUDIO

Наряду со многими другими способами фильтрации и подавления диагностических сообщений, в PVS-Studio есть предопределенный макрос PVS_STUDIO.

Первый случай, когда он может пригодиться - чтобы какой-то код не попадал в анализатор на проверку. Например, анализатор выдает диагностическое сообщение на такой код:

  int rawArray[5];
  rawArray[-1] = 0;

Однако, если его "обернуть" с помощью этого макроса, то сообщения не будет:

  int rawArray[5];
#ifndef PVS_STUDIO
  rawArray[-1] = 0;
#endif

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

char *st = (char*)malloc(10);
TEST_MACRO(st != NULL);
st[0] = '\0'; //V522

Чтобы подсказать анализатору, что выполнение программы прерывается при неверном условии, можно переопределить макрос следующим образом:

#ifdef PVS_STUDIO
#undef TEST_MACRO
#define TEST_MACRO(expr) if (!(expr)) throw "PVS-Studio";
#endif

char *st = (char*)malloc(10);
TEST_MACRO(st != NULL);
st[0] = '\0';

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

См. также обсуждение "Mark variable as not NULL after BOOST_REQUIRE in PVS-Studio" на сайте StackOverflow.com.

Макрос PVS_STUDIO будет автоматически подставлен при проверке кода из IDE. Если же вы используете проверку кода из командной строки, то по умолчанию макрос не передается анализатору и это нужно сделать вручную.