Обычно мы не пишем заметки про выход новой версии анализатора PVS-Studio. Однако в новый релиз вошло много интересных изменений, касающихся анализа C и C++ кода, о которых хочется рассказать нашим пользователям.
Читать полностью »
Рубрика «c++» - 80
Третья проверка Qt 5 с помощью PVS-Studio
2018-10-15 в 13:58, admin, рубрики: c++, devops, DevSecOps, open source, pvs-studio, qt, qt5, Блог компании PVS-Studio, статический анализ кода
Время от времени наша команда повторно проверяет проекты, про которые мы уже писали статьи. Очередным таким перепроверенным проектом стал Qt. Последний раз мы проверяли его с помощью PVS-Studio в 2014 году. Начиная с 2014 года проект начал регулярно проверяться с помощью Coverity. Это интересно. Давайте посмотрим, удастся ли нам теперь найти какие-то интересные ошибки с помощью PVS-Studio.
Читать полностью »
Learn OpenGL. Урок 6.2 – PBR. Аналитические источники света
2018-10-15 в 9:43, admin, рубрики: c++, irradiance, OpenGL, opengl 3, Pbr, render equation, Программирование, разработка игр В предыдущем уроке был дан обзор основам реализации физически правдоподобной модели рендеринга. В этот раз мы перейдем от теоретических выкладок к конкретной реализации рендера с участием непосредственных (аналитических) источников света: точечных, направленных или прожекторного типа.
Читать полностью »
Разработка классов-дескрипторов на C++-CLI
2018-10-15 в 7:48, admin, рубрики: .net, c++, Программирование, управление родными ресурсамиОглавление
Введение
1. Шаблон Basic Dispose в C++/CLI
1.1. Определение деструктора и финализатора
1.2. Использование семантики стека
2. Управляемые шаблоны
2.1. Интеллектуальные указатели
2.2. Пример использования
2.3. Блокировка финализаторов
Список литературы
Введение
C++/CLI — один из языков платформы .NET Framework — редко используется для разработки больших самостоятельных проектов. Его главное назначение — создание сборок для взаимодействия .NET с родным (неуправляемым) кодом. Соответственно, весьма широко используются классы, называемые классами-дескрипторами, управляемые классы, имеющие указатель на родной класс в качестве члена. Обычно такой класс-дескриптор владеет соответствующим родным объектом, то есть он должен его удалить в надлежащий момент.Читать полностью »
Игра с использованием математических графиков вместо графики
2018-10-14 в 19:01, admin, рубрики: c++, графики, математика, Программирование, формулы
На данном скриншоте Вам представлена, казалось бы, обыкновенная игра с пиксельной графикой. Однако не все так просто.
Рельеф земли местами напоминает синусоиду, а пули похожи на два симметричных графика корня из x.
На самом же деле, все что вы видите на экране так или иначе относится к математике, математическим кривым и графикам.
Читать полностью »
Learn OpenGL. Урок 6.1. PBR или Физически-корректный рендеринг. Теория
2018-10-11 в 21:08, admin, рубрики: c++, learnopengl.com, OpenGL, opengl3, Pbr, Программирование, разработка игр
Физически-корректный рендеринг
PBR, или физически-корректный рендеринг (physically-based rendering) это набор техник визуализации, в основе которых лежит теория, довольно хорошо согласующаяся с реальной теорией распространения света. Поскольку целью PBR является физически достоверная имитация света, он выглядит гораздо более реалистичным по сравнению с использованными нами ранее моделями освещения Фонга и Блинна-Фонга. Он не только лучше выглядит, но и дает неплохое приближение к реальной физике, что позволяет нам (и в частности художникам) создавать материалы, основанные на физических свойствах поверхностей, не прибегая к дешевым трюкам дабы заставить освещение выглядеть реалистично. Главным преимуществом такого подхода является то, что создаваемые нами материалы будут выглядеть как задумано независимо от условий освещения, чего нельзя сказать о других, не PBR подходах.
Семантика копирования и управление ресурсами в C++
2018-10-09 в 13:50, admin, рубрики: c++, Программирование, профессиональный кодОглавление
Введение
1. Основные стратегии копирования-владения
1.1. Стратегия запрета копирования
1.2. Стратегия исключительного владения
1.3. Стратегия глубокого копирования
1.4. Стратегия совместного владения
2. Стратегия глубокого копирования — проблемы и решения
2.1. Копирование при записи
2.2. Определение функции обмена состояниями для класса
2.3. Удаление промежуточных копий компилятором
2.4. Реализация семантики перемещения
2.5. Размещение vs. вставки
2.6. Итоги
3. Возможные варианты реализации стратегии совместного владения
4. Стратегия исключительного владения и семантика перемещения
5. Стратегия запрета копирования — быстрое начало
6. Жизненный цикл ресурса и объекта-владельца ресурса
6.1. Захват ресурса при инициализации
6.2. Расширенные варианты управления жизненным циклом ресурса
6.2.1. Расширенный жизненный цикл ресурса
6.2.2. Однократный захват ресурса
6.2.3. Повышение уровня косвенности
6.3. Совместное владение
7. Итоги
Приложения
Приложение A. Rvalue-ссылки
Приложение Б. Семантика перемещения
Список литературы
Введение
Управление ресурсами — это то, чем программисту на C++ приходится заниматься постоянно. Читать полностью »
DevDay про тестирование: Запись докладов
2018-10-09 в 6:39, admin, рубрики: api, api тестирование, c++, diffy, fuzzing, newman, Postman, qa, qa automation, Блог компании 2ГИС, конференции, Тестирование IT-систем, Тестирование веб-сервисов
28 сентября мы провели QA DevDay. Программу составляли по заявкам участников — два доклада про тестирование API и одно выступление про фаззинг от разработчика С++. Специально для тех, кто не любит классическую QA-секцию.
Сегодня делимся записями всех трёх докладов. Спикеры на связи, если у вас возникнут вопросы — смело задавайте в комментариях к посту.
Читать полностью »
DevBoy: делаем генератор сигналов
2018-10-06 в 18:22, admin, рубрики: 3D-печать, c++, diy или сделай сам, Kickstarter, open source, stm32, микроконтроллеры, ооп, программирование микроконтроллеров, разработкаПривет, друзья!
В прошлых статьях я рассказывал про свой проект и про его программную часть. В этой статье я расскажу как простенький генератор сигналов на 4 канала — два аналоговых канала и два PWM канала.
Perl 5: как в макросах ошибки прятались
2018-10-05 в 6:40, admin, рубрики: C, c++, open source, perl, Perl5, pvs-studio, static code analysis, Блог компании PVS-Studio, Компиляторы, статический анализ кодаДля пополнения списка языков программирования с открытым исходным кодом, которые были проверены с помощью статического анализатора кода PVS-Studio, был выбран Perl 5. Эта статья о найденных ошибках и трудностях просмотра результатов анализа. Количество макросов в коде столь велико, что создаётся ощущение, что код написан не на языке Си, а на каком-то его странном диалекте. Несмотря на затруднения при просмотре кода, удалось насобирать интересные проблемы, о которых и будет рассказано в этой статье.
Введение
Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения (Perl is a family of two high-level, general-purpose, interpreted, dynamic programming languages). Разработка Perl 5 была начата в 1994 году. Спустя пару десятилетий, код на языке Си с многочисленными макросами вызывает нервозность у современных программистов.
Исходный код Perl 5 был взят из официального репозитория (ветка blead). Для проверки проекта использовался статический анализатор кода PVS-Studio. Анализ проводился на операционной системе Linux, но анализатор также доступен для Windows и macOS.
Просмотр результатов анализа был не простой задачей. Дело в том, что анализатор проверяет препроцессированные .i файлы, в которых уже раскрыты все директивы препроцессора, а выдаёт предупреждения на файлы с исходным кодом. Это правильное поведение анализатора, ничего менять не нужно, но много предупреждений выдаётся на макросы! А за макросами скрывается нечитабельный код.
Читать полностью »