﻿# О том, как мы с сочувствием смотрим на вопрос на Stack Overflow, но молчим

Иногда на сайте stackoverflow\.com мы видим очередной вопрос, как искать баги определённого типа\. И знаем, что решением проблемы может стать использование PVS\-Studio\. К сожалению, мы вынуждены молчать, иначе ответ будет интерпретирован как неприкрытая реклама\. Это статья про наши душевные муки, где рассмотрен конкретный пример такой ситуации\.

![0877_Stackoverflow_And_Suffering_ru/image1.png](https://import.viva64.com/docx/blog/0877_Stackoverflow_And_Suffering_ru/image1.png)

Поводом начать писать этот текст, стал вопрос "[Scan\-Build for clang\-13 not showing errors](https://stackoverflow.com/questions/69592513/scan-build-for-clang-13-not-showing-errors)", заданный неким kratos из Индии\. Человек спрашивает, как искать паттерны следующего типа:

* запись в переменную типа bool целочисленных значений, отличных от 0 и 1;
* вызов в конструкторе и деструкторе виртуальных функций\.

Код, который он приводит в качестве примера:

```cpp
int f1(){
int a=5;
short b=4;
bool a1=a;//maybe warn
bool b1=b;//maybe warn
if(a1&&b1)return 1;
return 0;
}
class M{
public:
    virtual int GetAge(){return 0;}
};
class P:public M{
public:
    virtual int GetAge(){return 1;}
    P(){GetAge();}//maybe warn
    ~P(){GetAge();}//maybe warn
};

int main(){
    return 0;
}
```

Для поиска ошибок, он пытается использовать компилятор Clang 13, но у него не получается\.

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

Однако меня так и подмывает дать ответ, суть которого: попробуй PVS\-Studio\. Хотя нет, для ответа слишком мало\. Скажем так, мне очень хочется написать приблизительно такой комментарий:

> Не могу подсказать, можно ли искать эти ошибки с помощью Clang, но однозначно эти ошибки сразу находит статический анализатор PVS\-Studio: [пример на сайте Compiler Explorer](https://godbolt.org/z/Kx8hfx8en)\. Попробуй, быть может, он подойдёт лучше :\)

На первый подозрительный паттерн анализатор реагирует сразу двумя способами\. Поэтому всего получается 4 предупреждения:

* 6:1: note: V547 The 'A \= a' expression is equivalent to the 'A \= true' expression\.
* 6:1: warning: V786 It is odd that value 'a' is assigned to the 'a1' variable\. The value range of 'a1' variable: \[0, 1\]\.
* 7:1: note: V547 The 'A \= b' expression is equivalent to the 'A \= true' expression\.
* 7:1: warning: V786 It is odd that value 'b' is assigned to the 'b1' variable\. The value range of 'b1' variable: \[0, 1\]\.

И ещё два сообщения относятся к вызову виртуальных функций:

* 18:1: error: V1053 Calling the 'GetAge' virtual function in the constructor may lead to unexpected result at runtime\.
* 19:1: error: V1053 Calling the 'GetAge' virtual function in the destructor may lead to unexpected result at runtime\.

Эта информация могла бы быть вполне полезной для некоторых программистов\. Но, к сожалению, про это никто не узнает на Stack Overflow :\(\. 

Мало того, что в ответе упоминается коммерческий инструмент, так ещё это **первый вопрос**, который задаёт человек\.

![0877_Stackoverflow_And_Suffering_ru/image2.png](https://import.viva64.com/docx/blog/0877_Stackoverflow_And_Suffering_ru/image2.png)

Будет выглядеть, как будто я специально создал виртуального пользователя, задал вопрос и сам ответил на него, чтобы представить PVS\-Studio в выгодном свете\.

Нельзя ничего отвечать\. А то ещё забанят, усмотрев в этом тупой спамерский приём :\)\. Сами спросили, сами ответили\.\.\. Хоть бы виртуала, задающего вопрос, прокачали\.\.\. Совсем ленивые :\)\.

В общем, на Stack Overflow я ничего не написал, зато сделал эту маленькую заметку\. И мне легче на душе стало, и читателям необычная история из жизни команды PVS\-Studio :\)\.

Примечание\. Кто\-то может едко заметить, что такой комментарий будет действительно являться рекламой проприетарного инструмента\. И правильно, что за такое оштрафуют/забанят\. Не согласен\. С точки зрения многих разработчиков, никакой разницы нет\. Есть множество сценариев, когда PVS\-Studio можно использовать бесплатно: "[Бесплатные варианты лицензирования PVS\-Studio](https://pvs-studio.ru/ru/blog/posts/0614/)"\.

Спасибо за внимание\. И, раз уж речь шла про Clang, приглашаю заодно заглянуть в недавнюю заметку "[Выявляем ошибки в релизе LLVM 13\.0\.0](https://pvs-studio.ru/ru/blog/posts/cpp/0871/)"\. Безбажного вам кода\!