SlideShare una empresa de Scribd logo
1 de 3
Descargar para leer sin conexión
По колено в Си++ г... коде
Автор: Андрей Карпов

Дата: 01.03.2011

Наверное, многие знают сайт govnokod.ru. Если нет - рекомендую заглянуть тем, кто считает себя
программистом. Хорошее настроение будет обеспечено. Сайт так заявляет о себе:

Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки
не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру,
посмеёмся вместе!

Я по роду своей деятельности много и часто медитирую над разнообразнейшим С++ кодом. И, как
говорится, у меня тоже накопилось. Не могу больше нести это в себе. Извините, сейчас и с вами
поделюсь.

Предлагаю топ 10 лучших "лучших" фрагментов кода из собранных мною за последнее время. У
этих примеров есть существенное отличие от собранных на сайте "Говнокод.ру". Если там
множество примеров взято из студенческих курсовых и частных малоизвестных проектов, то мои
примеры из солидных мест. Это известные open-source приложения и открытые библиотеки.
Этими проектами и библиотеками мы все регулярно пользуемся уже не один год. Названия
приводить не буду, так как считаю это неэтичным. То, что в проекте попался один особенно
красивый фрагмент кода, вовсе не характеризует качество всего проекта.


10. Честные выборы кандидатов партий TRUE и FALSE.
m_bTypeED = ( nCmd == nCmd ) ? TRUE : FALSE;


9. Господи, пусть база данных всегда открывается. А то что мне на
"зюки" смотреть?
wstring myDBFName;

...

printf("Cannot open database %s",myDBFName);


8. А вот не надо такие вещи с помощью Ctrl-V делать.
fhead[11] = '0';

fhead[12] = '0';

fhead[13] = '0';

fhead[13] = '0';
7. Хороший и подробный комментарий, это замечательно! Хотя
конечно правильный код лучше.
/** Deletes all previous field specifiers.

    * This should be used when dealing with clients that

    * send multiple NEP_PACKET_SPEC messages, so only the last

    * PacketSpec is taken into account. */

int NEPContext::resetClientFieldSpecs() {

    this->fspecs.empty();

    return OP_SUCCESS;

} /* End of resetClientFieldSpecs() */


6. Просто и со вкусом.
flag = true;

flag = false;

// дальше flag вообще не используется


5. А вдруг с первого раза проверка не сработает...
if(freeze||winfreeze||(mainmenu&&gameon)||(!gameon&&gamestarted)||

    (mainmenu&&gameon)||(!gameon&&gamestarted)||(!gameon&&gamestarted))

Примечание. gameon и gamestarted это самые обыкновенные переменные типа bool.


4. Первородный грех использования Basic.
t.printf("%10.5f, %10.5f, %10.5f,n%10.5f, %10.5f,

              %10.5f,n%10.5f, %10.5f, %10.5f)",

           m[0, 0], m[0, 1], m[0, 2],

           m[1, 0], m[1, 1], m[1, 2],

           m[2, 0], m[2, 1], m[2, 2]);


3. Цикл для постижения Дао.
for (i = 0; i < num_tbl; i++) {

    *tbl++;

}
2. Да куда собственно этот файл денется? И так сойдет.
FILE *fp;

if (! (fp = fopen(filename, "wb")) == -1) {

    perror("opening image file failed");

    exit(1);

}

Примечание. Это условие всегда ложно благодаря двум ошибкам. Найди же их, искатель правды!


1. Первое место достается оператору switch.
switch(LOWORD(wParam))

    {

        case (IDOK || IDCANCEL):

         EndDialog(hDlg,TRUE);

         return(TRUE);

         break;

    }


Вывод
Собственно вывод, как и всегда, один. Не ошибается только тот, кто ничего не делает. От ошибок,
даже глупых, не застрахован ни один даже высококвалифицированный разработчик.

Más contenido relacionado

La actualidad más candente

Droidcon Moscow 2015. Взаимодействие между потоками в Android. Максим Ефимов ...
Droidcon Moscow 2015. Взаимодействие между потоками в Android. Максим Ефимов ...Droidcon Moscow 2015. Взаимодействие между потоками в Android. Максим Ефимов ...
Droidcon Moscow 2015. Взаимодействие между потоками в Android. Максим Ефимов ...Mail.ru Group
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
 
Модель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, ЯндексМодель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, ЯндексYandex
 
Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...
Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...
Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...Platonov Sergey
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтендTimophy Chaptykov
 
Нетривиальная обработка ошибок
Нетривиальная обработка ошибокНетривиальная обработка ошибок
Нетривиальная обработка ошибокoelifantiev
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС2ГИС Технологии
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORMBadoo Development
 
Методы поиска уязвимостей в программах
Методы поиска уязвимостей в программахМетоды поиска уязвимостей в программах
Методы поиска уязвимостей в программахVasiliy Shapovalov
 
Методы поиска уязвимостей
Методы поиска уязвимостейМетоды поиска уязвимостей
Методы поиска уязвимостейsolertia
 
Уходим глубоко в Fuzzing и применим его, где только можно, Алексей Набережный...
Уходим глубоко в Fuzzing и применим его, где только можно, Алексей Набережный...Уходим глубоко в Fuzzing и применим его, где только можно, Алексей Набережный...
Уходим глубоко в Fuzzing и применим его, где только можно, Алексей Набережный...Mail.ru Group
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Yandex
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Yandex
 
Многопоточность в браузере. Модель акторов — Константин Крамлих
Многопоточность в браузере. Модель акторов — Константин КрамлихМногопоточность в браузере. Модель акторов — Константин Крамлих
Многопоточность в браузере. Модель акторов — Константин КрамлихYandex
 

La actualidad más candente (20)

Vim or die
Vim or dieVim or die
Vim or die
 
Droidcon Moscow 2015. Взаимодействие между потоками в Android. Максим Ефимов ...
Droidcon Moscow 2015. Взаимодействие между потоками в Android. Максим Ефимов ...Droidcon Moscow 2015. Взаимодействие между потоками в Android. Максим Ефимов ...
Droidcon Moscow 2015. Взаимодействие между потоками в Android. Максим Ефимов ...
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Python i18n
Python i18nPython i18n
Python i18n
 
Модель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, ЯндексМодель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, Яндекс
 
Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...
Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...
Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтенд
 
Mocks and stubs
Mocks and stubsMocks and stubs
Mocks and stubs
 
Нетривиальная обработка ошибок
Нетривиальная обработка ошибокНетривиальная обработка ошибок
Нетривиальная обработка ошибок
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORM
 
Методы поиска уязвимостей в программах
Методы поиска уязвимостей в программахМетоды поиска уязвимостей в программах
Методы поиска уязвимостей в программах
 
Методы поиска уязвимостей
Методы поиска уязвимостейМетоды поиска уязвимостей
Методы поиска уязвимостей
 
Уходим глубоко в Fuzzing и применим его, где только можно, Алексей Набережный...
Уходим глубоко в Fuzzing и применим его, где только можно, Алексей Набережный...Уходим глубоко в Fuzzing и применим его, где только можно, Алексей Набережный...
Уходим глубоко в Fuzzing и применим его, где только можно, Алексей Набережный...
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
 
Многопоточность в браузере. Модель акторов — Константин Крамлих
Многопоточность в браузере. Модель акторов — Константин КрамлихМногопоточность в браузере. Модель акторов — Константин Крамлих
Многопоточность в браузере. Модель акторов — Константин Крамлих
 

Destacado

Intel sexto b presentacion
Intel sexto b presentacionIntel sexto b presentacion
Intel sexto b presentacionhaydeecm73
 
Brote virus
Brote virusBrote virus
Brote virusPablo
 
Competencias informacionales para Ciencias de la Educacións_educacion_tecnolo...
Competencias informacionales para Ciencias de la Educacións_educacion_tecnolo...Competencias informacionales para Ciencias de la Educacións_educacion_tecnolo...
Competencias informacionales para Ciencias de la Educacións_educacion_tecnolo...Juan Antonio Barrera Gómez
 
PARA LOS AMANTES DE LOS ANIMALES
PARA LOS AMANTES DE LOS ANIMALESPARA LOS AMANTES DE LOS ANIMALES
PARA LOS AMANTES DE LOS ANIMALESMarit
 
Artículos Radio-Televisión
Artículos Radio-TelevisiónArtículos Radio-Televisión
Artículos Radio-TelevisiónAna Rodríguez
 
Tarea number triteen
Tarea number triteenTarea number triteen
Tarea number triteenFer_94
 

Destacado (8)

Intel sexto b presentacion
Intel sexto b presentacionIntel sexto b presentacion
Intel sexto b presentacion
 
Fotos Jornadas AVS 2013 Granada
Fotos Jornadas AVS 2013 GranadaFotos Jornadas AVS 2013 Granada
Fotos Jornadas AVS 2013 Granada
 
Brote virus
Brote virusBrote virus
Brote virus
 
Competencias informacionales para Ciencias de la Educacións_educacion_tecnolo...
Competencias informacionales para Ciencias de la Educacións_educacion_tecnolo...Competencias informacionales para Ciencias de la Educacións_educacion_tecnolo...
Competencias informacionales para Ciencias de la Educacións_educacion_tecnolo...
 
PARA LOS AMANTES DE LOS ANIMALES
PARA LOS AMANTES DE LOS ANIMALESPARA LOS AMANTES DE LOS ANIMALES
PARA LOS AMANTES DE LOS ANIMALES
 
Tutorial uso de los rea
Tutorial uso de los reaTutorial uso de los rea
Tutorial uso de los rea
 
Artículos Radio-Televisión
Artículos Radio-TelevisiónArtículos Radio-Televisión
Artículos Radio-Televisión
 
Tarea number triteen
Tarea number triteenTarea number triteen
Tarea number triteen
 

Similar a По колено в Си++ г... коде

Intel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиIntel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarova
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»Yandex
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Tatyanazaxarova
 
О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?Tatyanazaxarova
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаYandex
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeTatyanazaxarova
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиGetDev.NET
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
Deep c slides_oct2011_rus
Deep c slides_oct2011_rusDeep c slides_oct2011_rus
Deep c slides_oct2011_rusGarrikus
 
Оптимизация в мире 64-битных ошибок
Оптимизация  в мире 64-битных ошибокОптимизация  в мире 64-битных ошибок
Оптимизация в мире 64-битных ошибокTatyanazaxarova
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20DefconRussia
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выраженияTatyanazaxarova
 
Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Yauheni Akhotnikau
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 

Similar a По колено в Си++ г... коде (20)

Intel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиIntel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибками
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
 
О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMerge
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработки
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Deep c slides_oct2011_rus
Deep c slides_oct2011_rusDeep c slides_oct2011_rus
Deep c slides_oct2011_rus
 
Оптимизация в мире 64-битных ошибок
Оптимизация  в мире 64-битных ошибокОптимизация  в мире 64-битных ошибок
Оптимизация в мире 64-битных ошибок
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выражения
 
Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?
 
PVS-Studio vs Chromium
PVS-Studio vs ChromiumPVS-Studio vs Chromium
PVS-Studio vs Chromium
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 

Más de Tatyanazaxarova

Урок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияУрок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияTatyanazaxarova
 
Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программTatyanazaxarova
 
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокУрок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокTatyanazaxarova
 
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиУрок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиTatyanazaxarova
 
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурУрок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурTatyanazaxarova
 
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхУрок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхTatyanazaxarova
 
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияУрок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияTatyanazaxarova
 
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиУрок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиTatyanazaxarova
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаTatyanazaxarova
 
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхУрок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхTatyanazaxarova
 
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейУрок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейTatyanazaxarova
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаTatyanazaxarova
 
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаУрок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаTatyanazaxarova
 
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовУрок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовTatyanazaxarova
 
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаУрок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаTatyanazaxarova
 
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокУрок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокTatyanazaxarova
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокTatyanazaxarova
 
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеУрок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеTatyanazaxarova
 
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияУрок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияTatyanazaxarova
 
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииУрок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииTatyanazaxarova
 

Más de Tatyanazaxarova (20)

Урок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияУрок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окружения
 
Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программ
 
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокУрок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
 
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиУрок 24. Фантомные ошибки
Урок 24. Фантомные ошибки
 
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурУрок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структур
 
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхУрок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данных
 
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияУрок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. Исключения
 
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиУрок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен данными
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
 
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхУрок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединениях
 
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейУрок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателей
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
 
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаУрок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвига
 
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовУрок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
 
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаУрок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числа
 
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокУрок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибок
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
 
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеУрок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном коде
 
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияУрок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложения
 
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииУрок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурации
 

По колено в Си++ г... коде

  • 1. По колено в Си++ г... коде Автор: Андрей Карпов Дата: 01.03.2011 Наверное, многие знают сайт govnokod.ru. Если нет - рекомендую заглянуть тем, кто считает себя программистом. Хорошее настроение будет обеспечено. Сайт так заявляет о себе: Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе! Я по роду своей деятельности много и часто медитирую над разнообразнейшим С++ кодом. И, как говорится, у меня тоже накопилось. Не могу больше нести это в себе. Извините, сейчас и с вами поделюсь. Предлагаю топ 10 лучших "лучших" фрагментов кода из собранных мною за последнее время. У этих примеров есть существенное отличие от собранных на сайте "Говнокод.ру". Если там множество примеров взято из студенческих курсовых и частных малоизвестных проектов, то мои примеры из солидных мест. Это известные open-source приложения и открытые библиотеки. Этими проектами и библиотеками мы все регулярно пользуемся уже не один год. Названия приводить не буду, так как считаю это неэтичным. То, что в проекте попался один особенно красивый фрагмент кода, вовсе не характеризует качество всего проекта. 10. Честные выборы кандидатов партий TRUE и FALSE. m_bTypeED = ( nCmd == nCmd ) ? TRUE : FALSE; 9. Господи, пусть база данных всегда открывается. А то что мне на "зюки" смотреть? wstring myDBFName; ... printf("Cannot open database %s",myDBFName); 8. А вот не надо такие вещи с помощью Ctrl-V делать. fhead[11] = '0'; fhead[12] = '0'; fhead[13] = '0'; fhead[13] = '0';
  • 2. 7. Хороший и подробный комментарий, это замечательно! Хотя конечно правильный код лучше. /** Deletes all previous field specifiers. * This should be used when dealing with clients that * send multiple NEP_PACKET_SPEC messages, so only the last * PacketSpec is taken into account. */ int NEPContext::resetClientFieldSpecs() { this->fspecs.empty(); return OP_SUCCESS; } /* End of resetClientFieldSpecs() */ 6. Просто и со вкусом. flag = true; flag = false; // дальше flag вообще не используется 5. А вдруг с первого раза проверка не сработает... if(freeze||winfreeze||(mainmenu&&gameon)||(!gameon&&gamestarted)|| (mainmenu&&gameon)||(!gameon&&gamestarted)||(!gameon&&gamestarted)) Примечание. gameon и gamestarted это самые обыкновенные переменные типа bool. 4. Первородный грех использования Basic. t.printf("%10.5f, %10.5f, %10.5f,n%10.5f, %10.5f, %10.5f,n%10.5f, %10.5f, %10.5f)", m[0, 0], m[0, 1], m[0, 2], m[1, 0], m[1, 1], m[1, 2], m[2, 0], m[2, 1], m[2, 2]); 3. Цикл для постижения Дао. for (i = 0; i < num_tbl; i++) { *tbl++; }
  • 3. 2. Да куда собственно этот файл денется? И так сойдет. FILE *fp; if (! (fp = fopen(filename, "wb")) == -1) { perror("opening image file failed"); exit(1); } Примечание. Это условие всегда ложно благодаря двум ошибкам. Найди же их, искатель правды! 1. Первое место достается оператору switch. switch(LOWORD(wParam)) { case (IDOK || IDCANCEL): EndDialog(hDlg,TRUE); return(TRUE); break; } Вывод Собственно вывод, как и всегда, один. Не ошибается только тот, кто ничего не делает. От ошибок, даже глупых, не застрахован ни один даже высококвалифицированный разработчик.