1. C++ / Говнокод #28892

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    // В преддверии нового года на сайте PVS-Studio увеличилось количества C++ говнокода.
    // Во-первых, вышла подбора багов за год, а во-вторых, квиз на поиск багов.
    // Первый пример кода из квиза для разминки:
    
    void  UObject::setDeltaPitch(const UMatrix &gizmo) {
      ....
      if (_fpzero(amount, eps))
        return
      rotateAccum.setAnglesXYZ(axis);
      ....
    }

    Если заинтересовались, то приятного чтения и удачи в поисках говнокодистых багов. Вас ждёт говнокод первого сорта.
    Топ 10 ошибок в C и С++ проектах в 2023 году - https://pvs-studio.ru/ru/blog/posts/cpp/1092/
    С++ квиз от PVS-Studio и Сергея Кушниренко - https://pvs-studio.ru/ru/blog/quest/kushnirenko_quiz/
    А если что-то останется непонятным в квизе, то есть его разбор - https://pvs-studio.ru/ru/blog/posts/cpp/1091/
    С наступающим НГ!

    Запостил: Andrey_Karpov, 22 Декабря 2023

    Комментарии (37) RSS

    • Гы, void-функция пытается что-то вернуть.

      Пропустили точку с запятой? Поди, писал джаваскриптер, привыкший к неявной точке с запятой.
      Ответить
      • > void-функция пытается что-то вернуть

        А что такого? Или это «дурной тон»?
        Ответить
        • А, ну да, сишнику плевать на тип, он знает, что основной аккумулятор (RAX на x86, например) всегда зарезервирован под результат.
          Ответить
          • Я просто так икономлю строки. Например, есть код
            void foo() {
                if (...) {
                    bar();
                    return;
                }
                ...
            }


            Его можно сократить до
            void foo() {
                if (...)
                    return bar();
                ...
            }


            заметь, я ещё на скобочках сыкономил. Зачем заказчику платить больше?
            Ответить
            • Что дороже, круглая или фигурная?
              Ответить
            • А если ещё использовать тернарник...

              void foo() {
                  return quux ? bar() : baz();
              }
              Ответить
            • К слову, крайний конкурс IOCCC проводился в 2020-м:
              https://www.ioccc.org/years.html#2020

              Волнуюсь за организаторов. С ними всё хорошо?
              Ответить
              • #define/**/Q(x,y)char*/*                               */q=y#x","#y")",*p,s[x;}
                  /*IOCCC'20*/#include/*                               */<stdio.h>/*-Qlock-*/
                    int(y),x,i,k,r;Q(9/*              12               */<<9];float(o)[03];
                      void(P)(){*o=r<0/*         11         1          */?r:-r;o[1]=39.5;
                       o[2]=22.5;for(k/*      10               2       */=0;++k<39;*o*=i
                        /6875.5/(k%2?k/*                               */:-k))y=o[1+k%2
                         ]+=*o;k=o[2];/*     9         o-------> 3     */p=s+y+k/2*80;
                          }int(main)()/*              /                */{for(p=s;+i<
                          1839;*q>32?k/*       8     L         4       */=i++/80-11,y
                           =(750>r*r+k/*          7         5          */*k*4)*4+y/2
                           ,*p++=r<41?/*               6               */y?"0X+0X+!"
                           [y-1]-1:+*q/*                               */++:10:*q++)
                           r=i%80-38;;/*                               */;for(x=13,r
                           =20;i=3600*/*     \       /    -------+     */--x,i;*p++=
                          "OISEA2dC8e"/*      \     /     ------ |     */[x%10],*p+=x
                          /10*41)P();r/*       \   /      ------ |     */=10;;sscanf(
                         __TIME__,"%d"/*        \ /       ------ |     */":%d:%d",&k,&
                        x,&i);for(i+=(/*         X        ------ |     */k*60+x)*60;18+
                       r;*p=k%2?*p%2?+/*      __/ \__         |  |     */59:44:*p>39?59:
                      39,i=!r--?i%3600/*     /  \ /  \        |  |     */*12:i)P();puts(s
                    ),"#define/**/Q(x"/*     \__/ \__/        +--+     */",y)char*q=y#x\","
                  "\"#y\")\",*p,s[x;}"/*                               */"/*IOCCC'20*/#inclu"
                "de<stdio.h>/*-Qlock-"/*                               */"*/int(y),x,i,k,r;Q(")
                Ответить
                • Тут серединка в /* комментарии */. Вот если бы и она компилировалась...
                  Ответить
              • #include<stdio.h>
                #include<stdlib.h>
                #include<unistd.h>
                typedef unsigned char*_;
                _ s,i,z,e,O,F=
                #include W
                
                       "; ; } { { { {	{ } { { } ; }	{ ; ; { } ; {	{ } ; } ; { {	{ { } { { } \
                	; } { { { { {	} { ; } { } {	{ } { { } { {	{ ; ; { { } {	{ } { ; } { \
                	    } { {	{ { {	} ; }	{ } {		{ } {		{ { \
                	    } { ;	} { }	{ { {	{ { }		; } {		} { \
                	    { { }	{ { }	; ; {	; ; {		{ } {		{ } \
                	    { ; }	{ } {	{ { }	{ } {		{ { ;		{ { \
                	    { } {	{ } {	{ { {	} { {		{ { {		} ; \
                	; { ; ; { { {	{ { } { ; } {	} { { { { { }	; ; { ; ; { {	; { ; { { { \
                	} { } { { { ;	{ ; { { { ; ;	{ } { { { } {	; } { } { { {	{ { } { { { \
                	; ; { { } { ;	{ { { } { } {	{ { ; { ; { {	{ ; ; { { { {	{ } { { { { \
                	\
                	} { { { { { }	; } { } { { {	{ { { } { { {	{ } ;		} ; { { { } \
                	{ { { { { } {	{ } { { { } {	{ ; { { } { ;	{ { {		{ ; { { ; { \
                	{ { {		{ } }		{ { ;	{ } {	{ { ;		; { \
                	{ ; { ; { } {	} ; {		} { } ; { ; }	{ { {		} { ; { } \
                	{ ; { { { } {	; } }		{ ; ; { { } {	; ; }		{ ; ; ; { \
                		} } {	{ } }		{ ; {	{ } }	{ } }		} { \
                		; } {	} } {		; } }	{ ; ;	{ } }		} { \
                	{ { { { { } }	} ; ; { } { ;	; } {	; } ;	} { } { } } }	{ } { } { } \
                	{ ; } { ; ; {	} { } } { } {	; } }	} { }	} } } } } ; }	} } } ; { } \
                	{ } ; } } } }	; } } } ; { {	} } }	; ; }	} { { } } } ;	{ { " ; ; ; ;
                Ответить
    • Ура, Andrey_Karpov вернулся!
      Ответить
    • это что, даже не ворнинг?
      Ответить
    • какие книжки-туториалы читать, если захочется вникнуть в создание своего хардвара типа контроллеров? там про юсб, бутуз, железки
      Ответить
      • Тебя интересует конкретно проектирование цифровых чипов? Ну это тебе надо учить Verilog, VHDL. На хабре Панчул про это какие-то статьи пишет https://habr.com/ru/users/YuriPanchul/publications/articles/
        Ну и погугли про проектирование ASIC, это тоже оно. Я сам в этой хрени не разбираюсь, так что конкретные туториалы и книжки посоветовать не могу... Слышал что какой-то Nand2tetris есть, но я его не проходил https://www.nand2tetris.org/
        Ответить
        • Цифровые чипсы со сметаной и укропом.
          Ответить
        • А если повыше уровнем, дла анскиллов?
          Грубо говоря, взять какую-нибудь ESPшку, присобачить к ней пару датчиков и научить раздавать показания по «Wi-Fi».
          Ответить
          • > Грубо говоря, взять какую-нибудь ESPшку, присобачить к ней пару датчиков и научить раздавать показания по «Wi-Fi».

            Для такого можно купить готовую плату с этой ESP, купить датчик, почитать всякие примеры готового кода, почитать документацию на API конкретной хуиты (я писал код под контроллер с вайфаем, там никаких беркли-сокетов нихуя нет, для отправки UDP пакета нужно было использовать специфичное для этой хуиты API. Никаких специальных книг про это говноапи нет, есть официальная документация на такую хуиту, и ее обычно достаточно). Если надо подключать какой-то датчик и нет готового драйвера, надо читать документацию на этот датчик, потом через какой-то интерфейс типа SPI, I2C этот датчик надо подключить, прочитать про API хуиты (какие там функции есть, чтобы отправлять-получать какие-то там байтики по интерфейсу), написать драйвер, отладить его (тут кстати поможет логический анализатор чтоб хрень отладить)... как-то так
            Не знаю че тут по книгам/статьям рекомендовать, я тупо читал всякую рандомную хуйню из интернета и как-то разобрался
            Ответить
        • Скорее diy из готовых компонентов
          Ответить
          • Купи себе Yun и делай из готовых.
            Ответить
            • https://yun.net.ua/

              ???
              Ответить
              • http://yun.tech/
                Ответить
                • Secure Site Not Available

                  а ты точно продюсер?
                  Ответить
                • Taiwan is part of China,
                  we deeply love China and Taiwan.
                  Our conquest is the sea of stars !

                  с порога предлагают накормить кошка жена плошка рис
                  Ответить
                  • China is part of Empire of Japan. We love both China and Japan
                    Ответить
                  • Я тоже так считаю. Republic of China — настоящий Китай, а всякие «народные республики» мы знаем, что такое.
                    Ответить
                    • А «Гонг Конг» — тоже Китай?
                      Ответить
                      • «Гонг Конг» — 97
                        https://www.youtube.com/watch?v=NmlGVTsyqcQ
                        Ответить
                      • А «Кинг Конг»?
                        Ответить
                        • Кстати, говнинхо. Я благодарен тобi, за то, что ты сохранил мои цитаты у себя на параше.

                          Интересно бывает почитать. А этот похуист - ~страйко~ - удалил их. Гондон!
                          Ответить
      • Хоровица
        Ответить
    • Странно, что это не ворнинг
      Ответить
      • Потому что обезьяны делали.
        А у сапиенсов если нет составного оператора, то и смысла заворачивать в скобки тоже нет.
        Ответить
      • Почему бы не встроить PVS прямо в сборку? Чтобы всякое говно даже собрать нельзя было, не то, что закоммитить и выкатить на прод. У нас, напри мер, все ворнинги в ошибки переключены.
        Ответить

    Добавить комментарий