| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > WTF? |
| Автор: Thunderbolt 3.10.2013, 13:50 | ||||||||
Меня не покидает когнитивный диссонанс. На форумах обсуждаются возвышенные идеи о написании сверх надежных классов, кто-то рассказывает, что его проект собирается с ключами -Wall -Wextra -pedantic -Weffc++. Господи, где все эти достижения науки и техники? Почему я вижу кругом глупейшие ошибки? Может быть, со мной что-то не так?![]() Нет, на самом деле я вижу и отличные проекты. Примером может служить библиотека http://www.viva64.com/go.php?url=1304. Это весьма интересная библиотека, с точки зрения кода. Пишется она на Паскале, а потом транслируется в C++, C#. Помимо прочих разных преимуществ, такой подход позволяет выловить много разных ошибок, так как одна и та же программа собирается компиляторами для разных языков. Впрочем, это отдельная история. Возможно, мы как-нибудь, напишем с автором этой библиотеки совместную заметку. Такие приятные исключения, пожалуй, ещё больше усиливают диссонанс. Вот представьте мои ощущения. Я беру сложный пакет численного анализа и не нахожу в нем ошибок. Мне радостно за качественный код. Немного только грустно, что такому человеку PVS-Studio не продать. Ну да ладно. Беру проект http://www.viva64.com/go.php?url=1305. Проверяю. WTF? Других слов я подобрать не могу. Как вам такие конструкторы?
В первом конструкторе промахнулись мимо массива. Во втором скопировали строчку и забыли поменять индекс. Прости читатель, не могу удержаться от картинки. Она очень точно передает мои эмоции. ![]() "Доставляют" и другие конструкторы. Например, вот это мило:
Вместо вызова другого конструктора, создается и сразу уничтожается временный объект. А члены класса остаются неинициализированными. http://www.viva64.com/ru/b/0127/. Господи, где те люди, которые, засучив рукава, пишут статьи про C++11, лямбды, Boost.Asio, shared_ptr, constexpr, LINQ. Почему я вижу в коде:
Поделили размер указателя на размер структуры и получили 0. Что вообще здесь хотели сделать? WTF? Впрочем, когда даже понятно, что и как хотели записать в файл, от этого не легче.
Если не заметили баг, то я подскажу. Переменная 'i' не инициализируется: for(size_t i; i<size; ++i). Извините, что поделился всем этим с вами. Мне так легче. Заодно, я естественно скажу, что эти ошибки были найдены с помощью статического анализатора кода http://www.viva64.com/ru/pvs-studio/. Расположение этих и некоторых других забавных ошибок я выложил вот в этом http://www.viva64.com/external-pictures/txt/OpenCOLLADA-selected.txt. И как всегда, если будут желающие более тщательно проверить этот проект, я готов поделиться ключиком. Удачи и безбажного вам кода! |
| Автор: ToDDIk 3.10.2013, 13:52 |
| Эмс. это же с хабра. http://habrahabr.ru/company/pvs-studio/blog/195928/ Извиняюсь. вижу, что один автор =) |
| Автор: volatile 3.10.2013, 17:11 |
Да глупейшие ошибки в солидных проектах повергают в шок, согласен. Как-то решил использовать библиотеку длинных чисел GMP/MPFR, хваленую перехваленую, которую чуть ли не НАСА использует, и за пару часов без всяких инструментов нашел 10 тупейших багов. Нашел бы и больше - дальше просто не стал искать. Дурдом полный в общем. |
| Автор: EgoBrain 4.10.2013, 02:58 |
| Странно что автор статьи не вставлял фейспалмы на пол экрана когда разбирал проект "Сетевой ГТА 3", там что-то вроде было. Только после этой статья до меня дошла цель автора: пиар этого инструментария PVS-Studio. Думаю такого рода ошибки прежде всего связанны с чрезмерной..., вобщем авторы кода сильно торопятся, как наркоманы во время ломки получившие в руки дозняк - нужно поскорее скомпилить и порадовадться результату, видать плеть за спинами практически не опускается. |
| Автор: xvr 4.10.2013, 15:32 | ||||
Ошибки бывают всегда, таже там, где все тщательнейшим образом тестируют (и постоянно). Вот пара цитат из моей подборки 'всяких разных багов'
|
| Автор: bsa 10.10.2013, 11:57 |
| EgoBrain, скажу честно - это очень эффективный и полезный способ пиара. Не спроста его посты не блокируются модераторами Добавлено через 1 минуту и 47 секунд Не совсем. Это больше похоже на код человека, который прочел вчера книгу "С для чайников" и что-то про отличия С++ от С и бросился кодировать. |