Кресты / Говнокод #28892 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 Andrey_Karpov, (Updated )

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

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

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

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


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


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

            void foo() {
                return quux ? bar() : baz();
            }
            Ответить
            • #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
              
                     "; ; } { { { {	{ } { { } ; }	{ ; ; { } ; {	{ } ; } ; { {	{ { } { { } \
              	; } { { { { {	} { ; } { } {	{ } { { } { {	{ ; ; { { } {	{ } { ; } { \
              	    } { {	{ { {	} ; }	{ } {		{ } {		{ { \
              	    } { ;	} { }	{ { {	{ { }		; } {		} { \
              	    { { }	{ { }	; ; {	; ; {		{ } {		{ } \
              	    { ; }	{ } {	{ { }	{ } {		{ { ;		{ { \
              	    { } {	{ } {	{ { {	} { {		{ { {		} ; \
              	; { ; ; { { {	{ { } { ; } {	} { { { { { }	; ; { ; ; { {	; { ; { { { \
              	} { } { { { ;	{ ; { { { ; ;	{ } { { { } {	; } { } { { {	{ { } { { { \
              	; ; { { } { ;	{ { { } { } {	{ { ; { ; { {	{ ; ; { { { {	{ } { { { { \
              	\
              	} { { { { { }	; } { } { { {	{ { { } { { {	{ } ;		} ; { { { } \
              	{ { { { { } {	{ } { { { } {	{ ; { { } { ;	{ { {		{ ; { { ; { \
              	{ { {		{ } }		{ { ;	{ } {	{ { ;		; { \
              	{ ; { ; { } {	} ; {		} { } ; { ; }	{ { {		} { ; { } \
              	{ ; { { { } {	; } }		{ ; ; { { } {	; ; }		{ ; ; ; { \
              		} } {	{ } }		{ ; {	{ } }	{ } }		} { \
              		; } {	} } {		; } }	{ ; ;	{ } }		} { \
              	{ { { { { } }	} ; ; { } { ;	; } {	; } ;	} { } { } } }	{ } { } { } \
              	{ ; } { ; ; {	} { } } { } {	; } }	} { }	} } } } } ; }	} } } ; { } \
              	{ } ; } } } }	; } } } ; { {	} } }	; ; }	} { { } } } ;	{ { " ; ; ; ;
              Ответить
  • какие книжки-туториалы читать, если захочется вникнуть в создание своего хардвара типа контроллеров? там про юсб, бутуз, железки
    Ответить
    • Тебя интересует конкретно проектирование цифровых чипов? Ну это тебе надо учить 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 хуиты (какие там функции есть, чтобы отправлять-получать какие-то там байтики по интерфейсу), написать драйвер, отладить его (тут кстати поможет логический анализатор чтоб хрень отладить)... как-то так
          Не знаю че тут по книгам/статьям рекомендовать, я тупо читал всякую рандомную хуйню из интернета и как-то разобрался
          Ответить
  • Странно, что это не ворнинг
    Ответить
    • Потому что обезьяны делали.
      А у сапиенсов если нет составного оператора, то и смысла заворачивать в скобки тоже нет.
      Ответить
    • Почему бы не встроить PVS прямо в сборку? Чтобы всякое говно даже собрать нельзя было, не то, что закоммитить и выкатить на прод. У нас, напри мер, все ворнинги в ошибки переключены.
      Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8