• Инкремент элементов вектора

    • Translation
    В каком случае инкремент элементов вектора std::vector будет быстрее – если они имеют тип uint8_t или uint32_t?

    Чтобы не рассуждать отвлечённо, рассмотрим две конкретные реализации:

    void vector8_inc(std::vector<uint8_t>& v)
    {
      for (size_t i = 0; i < v.size(); i++)
      {
        v[i]++;
      }
    }
    
    void vector32_inc(std::vector<uint32_t>& v)
    {
      for (size_t i = 0; i < v.size(); i++)
      {
        v[i]++;
      }
    }
    Попробуем угадать
  • Преподавателям на заметку: PVS-Studio для знакомства студентов с инструментами анализа кода

      PVS-Studio и обучение

      По общению в поддержке и некоторым другим косвенным признакам мы заметили, что среди наших бесплатных пользователей стало много студентов. Причина: анализатор PVS-Studio начал использоваться некоторыми преподавателями в рамках дисциплин, связанных с разработкой программного обеспечения. Нам это очень приятно, и мы решили написать эту небольшую заметку, чтобы привлечь внимание и других преподавателей. Мы рады, что студенты знакомятся с методологией статического анализа кода в целом и инструментом PVS-Studio в частности. Наша команда постарается внести вклад в развитие этой тенденции.
      Читать дальше →
    • For professors' note: use PVS-Studio to get students familiar with code analysis tools

        Picture 1

        Our support chats and some other indirect signs showed that there are many students among our free users. Here's the reason: PVS-Studio is now more often used by professors in courses related to software development. We are very pleased with this, and we decided to write this small article to fall under notice of other teachers. We are pleased that students become acquainted with the methodology of static code analysis in general and the PVS-Studio tool in particular. Our team will try to contribute to this trend.
        Read more →
      • Работа с возражениями: статический анализ будет отнимать часть рабочего времени

          Держи багОбщаясь с людьми на конференциях и в комментариях к статьям, мы сталкиваемся со следующим возражением: статический анализ сокращает время на нахождение ошибок, но отнимает время у программистов, что нивелирует пользу от его использования и даже наоборот тормозит процесс разработки. Давайте разберём это возражение и покажем, что оно беспочвенно.
          Читать дальше →
        • Handling Objections: Static Analysis Will Take up Part of Working Time

            bugTalking to people at conferences and in comments to articles, we face the following objection: static analysis reduces the time to detect errors, but takes up programmers' time, which negates the benefits of using it and even slows down the development process. Let's get this objection straightened out and try to show that it's groundless.
            Read more →
          • Печальная судьба спецификаторов формата функции printf для символов Юникода в Visual C++

            • Translation
            Поддержка Юникода в Windows появилась раньше, чем в большинстве остальных операционных систем. Из-за этого многие проблемы, связанные с представлением символов, в Windows решались не так, как в других системах, разработчики которых отложили внедрение нового стандарта до лучших времён [1]. Самый показательный пример: в Windows для представления символов Юникода используется кодировка UCS-2. Она была рекомендована Консорциумом Юникода, поскольку версия 1.0 поддерживала только 65 536 символов [2]. Пять лет спустя Консорциум передумал, но к тому времени менять что-то в Windows было уже поздно, так как на рынок уже были выпущены системы Win32s, Windows NT 3.1, Windows NT 3.5, Windows NT 3.51 и Windows 95 — все они использовали кодировку UCS-2 [3].

            Но сегодня мы поговорим о строках форматирования функции printf.
            Читать дальше →
          • Операции сравнения в C++20

            • Translation
            Встреча в Кёльне прошла, стандарт C++20 приведён к более или менее законченному виду (по крайней мере до появления особых примечаний), и я хотел бы рассказать об одном из грядущих нововведений. Речь пойдёт о механизме, который обычно называют operator<=> (стандарт определяет его как «оператор трёхстороннего сравнения», но у него есть неформальное прозвище «космический корабль»), однако я считаю, что область его применения гораздо шире.

            У нас не просто будет новый оператор — семантика сравнений претерпит существенные изменения на уровне самого языка.
            Читать дальше →
          • PVS-Studio — двигатель прогресса

              Рисунок 1

              Команда PVS-Studio и наш продукт делают большой вклад в развитие качества программного обеспечения. Причем, помимо явного обнаружения ошибок в закрытых и открытых проектах, происходит косвенный вклад в развитие компиляторов и других инструментов анализа кода. Нам приятно, что мы иногда являемся законодателями мод и мы решили посвятить этому небольшую заметку в нашем блоге.
              Читать дальше →
            • PVS-Studio: Engine of Progress

                Рисунок 1

                A PVS-Studio team and our product make a great contribution to upgrading of software quality. Moreover, in addition to detecting errors in closed and open source projects, there is an indirect contribution to the development of compilers and other tools of code analysis. We are pleased that in some cases we are trendsetters and we decided to dedicate a small note to this in our blog.
                Read more →
              • Статический анализ улучшит кодовую базу сложных C++ проектов

                  Старые большие проекты

                  Постепенно и незаметно складывается ситуация, когда сложность серьёзных C++ проектов становится запредельной. К сожалению, теперь C++ программист не может полагаться только на свои силы.
                  Читать дальше →
                • Как быстро посмотреть интересные предупреждения, которые выдает анализатор PVS-Studio для C и C++ кода?


                    Время от времени программисты, которые начинают знакомиться с анализатором кода PVS-Studio, спрашивают: «Есть ли список предупреждений, которые точно указывают на ошибки?» Такого списка нет по той причине, что неинтересные (ложные) предупреждения в одном проекте, в другом оказываются очень важными и полезными. Однако начать знакомство с анализатором с самых интересных предупреждений вполне можно. Давайте рассмотрим эту тему подробнее.
                    Читать дальше →
                  • How to quickly check out interesting warnings given by the PVS-Studio analyzer for C and C++ code?


                      Once in a while, programmers who start getting acquainted with the PVS-Studio code analyzer ask me: «Is there a list of warnings that accurately indicate errors?» There is no such list because uninteresting (false) warnings in one project are very important and useful in another one. However, one can definitely start digging into the analyzer from the most exciting warnings. Let's take a closer look at this topic.
                      Read more →
                    • График развития диагностических возможностей в PVS-Studio

                        Развитие PVS-Studio

                        С момента появления продукта PVS-Studio прошло более 8 лет, и всё это время мы реализовывали в нём новые диагностические правила. И прекращать не собираемся. Если вас заботят вопросы, не растеряли ли мы за эти годы бодрость, и не останавливается ли PVS-Studio в развитии, то приведённый в статье график снимет эти вопросы. Анализатор активно развивается, причём скорость развития с годами только увеличивается.
                        Читать дальше →
                      • PVS-Studio Graph of Diagnostic Abilities Development

                          Maturation

                          More than 8 years have passed since the PVS-Studio product was released, and all this time we've been implementing new diagnostic rules in it. Moreover, we are not going to stop. If you care about whether we have lost our vivacity over the years, and whether PVS-Studio stops developing, the graph given in the article will take this issue off the table. The analyzer is actively developing, and the speed of development only increases over the years.
                          Read more →
                        • Находим баги в LLVM 8 с помощью анализатора PVS-Studio

                            PVS-Studio and LLVM 8.0.0

                            Прошло более двух лет с момента последней проверки кода проекта LLVM с помощью нашего анализатора PVS-Studio. Давайте убедимся, что анализатор PVS-Studio по-прежнему является лидирующим инструментом по выявлению ошибок и потенциальных уязвимостей. Для этого проверим и найдём новые ошибки в релизе LLVM 8.0.0.
                            Читать дальше →
                          • Вред макросов для C++ кода

                              define

                              Язык C++ открывает обширные возможности для того, чтобы обходиться без макросов. Так давайте попробуем использовать макросы как можно реже!

                              Сразу оговорюсь, что я не являюсь фанатиком и не призываю отказываться от макросов из идеалистических соображений. Например, когда речь заходит о ручной генерации однотипного кода, я могу признать пользу от макросов и смириться с ними. Например, я спокойно отношусь к макросам в старых программах, написанных с использованием MFC. Нет смысла воевать с чем-то вроде этого:

                              BEGIN_MESSAGE_MAP(efcDialog, EFCDIALOG_PARENT )
                                //{{AFX_MSG_MAP(efcDialog)
                                ON_WM_CREATE()
                                ON_WM_DESTROY()
                                //}}AFX_MSG_MAP
                              END_MESSAGE_MAP()

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

                              Я говорю о других макросах, с помощью которых пытаются избежать реализации полноценной функции или стараются сократить размер функции. Рассмотрим несколько мотивов избегать таких макросов.
                              Читать дальше →
                            • Бесплатные варианты лицензирования PVS-Studio

                                PVS-Studio Free

                                Существует несколько вариантов бесплатного лицензирования статического анализатора кода PVS-Studio, предназначенного для поиска ошибок и потенциальных уязвимостей. Бесплатной лицензией могут воспользоваться открытые проекты, маленькие закрытые проекты, публичные специалисты по безопасности и обладатели статуса Microsoft MVP. В статье кратко рассматривается каждый из этих вариантов.

                                PVS-Studio — это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в среде Windows, Linux и macOS.
                                Читать дальше →
                              • Ways to Get a Free PVS-Studio License

                                  PVS-Studio Free

                                  There are several ways to get a free license of the PVS-Studio static code analyzer, which is meant for searching for errors and potential vulnerabilities. Open source projects, small closed projects, public security specialists and owners of the Microsoft MVP status can use the license for free. The article briefly describes each of these options.

                                  PVS-Studio is a tool designed to detect errors and potential vulnerabilities in the source code of programs, written in C, C++, C# and Java. It works in Windows, Linux and macOS environments.
                                  Read more →
                                • Ложные срабатывания в PVS-Studio: как глубока кроличья нора

                                    Единорог PVS-Studio и GetNamedSecurityInfo

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