SlideShare a Scribd company logo
1 of 3
Download to read offline
По колено в Си++ г... коде
Автор: Андрей Карпов

Дата: 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;

    }


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

More Related Content

What's hot

TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
 
Методы поиска уязвимостей в программах
Методы поиска уязвимостей в программахМетоды поиска уязвимостей в программах
Методы поиска уязвимостей в программах
Vasiliy Shapovalov
 

What's hot (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++ – Дмитрий Леванов,...
 
Многопоточность в браузере. Модель акторов — Константин Крамлих
Многопоточность в браузере. Модель акторов — Константин КрамлихМногопоточность в браузере. Модель акторов — Константин Крамлих
Многопоточность в браузере. Модель акторов — Константин Крамлих
 

Viewers also liked (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 to По колено в Си++ г... коде

Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Dima Dzuba
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
Andrey Karpov
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
Stanfy
 
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
Computer Science Club
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 

Similar to По колено в Си++ г... коде (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 лет на разработку анализатора ...
 

More from Tatyanazaxarova

More from 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-битной конфигурации
 

Recently uploaded

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 

Recently uploaded (9)

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 

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

  • 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; } Вывод Собственно вывод, как и всегда, один. Не ошибается только тот, кто ничего не делает. От ошибок, даже глупых, не застрахован ни один даже высококвалифицированный разработчик.