1. Список говнокодов пользователя MiD

    Всего: 13

  2. Куча / Говнокод #22642

    −12

    1. 1
    Являются ли стандартные либы частью языка Си.

    Холивар

    MiD, 21 Марта 2017

    Комментарии (0)
  3. Си / Говнокод #21658

    −52

    1. 1
    2. 2
    3. 3
    4. 4
    static volatile stm32f4_usart *usart_get_regs(const console_tbl *ct)
    {
      return (stm32f4_usart *) ct->ulCtrlPort1;
    }

    А если будет замест volatile - inline, возможен вариант, что компилятор выкинет эту функцию?

    MiD, 07 Ноября 2016

    Комментарии (26)
  4. Си / Говнокод #21638

    −26

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    Оптимизатор xyев.
    
    enum tag  {
       INT16 = 0,
       FLOAT32
    };
    
    union type {
        struct int16 {
            int x;
            int z;
        } int16;
        struct float32 {
            float x;
            float z;
        } float32;
    
        enum tag tag;
    } axis;
    
    void foo(void *foo, enum tag tag) 
    {
        int x = 7;
        int z = 4;
    
        if(tag == INT16) {
        *(int *)(&foo)[0] = *(int *)&x;
        *(int *)(&foo)[1] = *(int *)&z;
        }
    
        .......
    }
    
    /**Теперь по нормальному
    void foo(void *foo, enum tag tag) 
    {
        int x = 7;
        int z = 4;
    
        if(tag == INT16) {
        int *ptr = (int *)foo;
    
        ptr[0] = x;
        ptr[1] = z;
        }
    
        .......
    }
    **/
    
    
    int main(void)
    {
       axis.tag = INT16;
    
       foo((axis.tag == INT16)? (void *)&axis.int16 : 
                                               (void *)&axis.float32,
              axis.tag);
    
       return 0;
    }

    данные обрабатываются в одном из двух форматов, решил сделать приведение типов, не заводя ещё одну переменную, в итоге всё наибнулось. Мораль - нейух выёживаться - пиши нормально.
    А можно ли действительно не писать, что то вроде int *ptr = (int *)foo;, а сразу работать с void'овым указателем?

    MiD, 03 Ноября 2016

    Комментарии (12)
  5. Си / Говнокод #20518

    −47

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    float *quaternions;
    
    for(size_t i = 0; i < 4; i++) {
        ((int32_t *)&quaternions)[i] = __builtin_bswap32(((int32_t *)&quaternions)[i]);
    }
    
    /**GCC: "какая-то магия с приведением и разворотом. Меня всё устраивает, всё ок." **/
    
    А если:
    
    ((int32_t *)&quaternions)[0] = __builtin_bswap32(((int32_t *)&quaternions)[0]);
    
    /**GCC: "warning: dereferencing type-punned pointer will break strict-aliasing rules" **/

    MiD, 11 Августа 2016

    Комментарии (60)
  6. Си / Говнокод #20453

    −46

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */
    {
    	/* There is nothing to do here, just iterating to the wanted
    	insertion position. */
    }

    Встал остро вопрос выбора использования ОС в команде. Сперва я с пеной у рта пытался навязать использование ОСи как таковой, теперь когда согласились, новый спор. Собираются использовать freertos. А у меня слёзы наворачиваются, когда я вижу подобное говно: стиль тупой блондинки, тяжело воспринимаемые конструкции, модули по 2к+ строк кода, безмозглые комменты и т.д. Для реализации проекта будет годна RTEMS, но к сожалению, я не успел толком её попробовать, что бы конкретно привести факты: быстрее, выше, сильнее. Если говорить только про code style, меня никто слушать не станет. Может есть кто кинет в меня умными ссылками, где freertos смешают с говном?

    MiD, 01 Августа 2016

    Комментарии (21)
  7. Си / Говнокод #20103

    −50

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    #include <stdio.h>
    #include <stdint.h>
    
    int main(void)
    {
    	size_t foo = -5;
    	uint8_t foo1 = -5;
    	
    	printf("%d %d", foo, foo1);
    	
    	return 0;
    }

    А почему лыжи не едут? size_t же ведь беззнаковый.
    З.Ы. и да мне стыдно

    MiD, 31 Мая 2016

    Комментарии (19)
  8. Си / Говнокод #20071

    −47

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    static struct frame rx_frame = {
    	.data = rx_buffer,
    	.sz = sizeof(rx_buffer)
    };
    
    ...
    
    где-то в том же модуле:
    struct frame *task_communication_receive_frame(void)
    {
    memset(rx_frame, 0, sizeof(rx_frame));
    ...
    }

    Действительно, чёй-то какая-то срань принимается

    MiD, 25 Мая 2016

    Комментарии (35)
  9. bash / Говнокод #19738

    −52

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    #!/bin/bash
    git reset --hard
    git checkout --orphan temp
    git branch > branches
    branch_list=()
    while read LINE;
    do
    	branch_list+=("$LINE");
    done < branches
    
    for str in "${branch_list[@]}";
    do 
    	[ "$str" == "* temp" ] && break 
    	git branch -D "$str"
    done
    
    git checkout -b master
    git branch -D temp
    
    printf "#include \"stdio.h\" \n\n int main(void)\n{\n\tprintf(\"Ebat' ti loh\");\n\treturn 0;\n}" > main.c
    git add main.c
    git commit -am "pobeditel' po jizni"
    
    gcc --std=gnu89 main.c -o out.o
    while : 
    do
    	./out.o
    	printf "\n"
    done

    Вышел патч для git. Добавляешь в репо с проектом и запускаешь.
    патч чистит всё говно, что найдет.

    Навеяно комментом @kerman из Говнокод #19735

    MiD, 01 Апреля 2016

    Комментарии (15)
  10. Си / Говнокод #19449

    −48

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    #include <stdio.h>
    #include <stdint.h>
    #include <string.h>
    
    struct foo {
        uint16_t a;
        uint16_t b;
        uint16_t c;
    };
    
    struct posted {
        uint8_t **ptr;
    } posted = {
        .ptr = (uint8_t *[]) {(uint8_t *)&(struct foo) {.a = 0x1011, .b = 0x1213, .c = 0x1415},
    	                  (uint8_t *)&(struct foo) {.a = 0x1617, .b = 0x1819, .c = 0x2021},
    	                  NULL}
    };
    
    int main(void)
    {
        for(uint8_t *ptr = &(*posted.ptr)[0];; ptr++) {
            static size_t idx;
    
            printf("%x ", *ptr);
    
            if(ptr == sizeof(struct foo) - 1 + *(idx + posted.ptr)) {
                idx++;
                ptr = *(idx+posted.ptr);
                if(ptr == NULL) break;
            }
        }
        return 0;
    }

    Структура головного мозга

    MiD, 12 Февраля 2016

    Комментарии (0)
  11. Си / Говнокод #19095

    −97

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    //прерывание по таймеру А
    
    ISR(TIMER1_COMPA_vect)
    {
        u08 i=0;  // локальная переменная
    
            cli();
            PORTD |= _BV(PD4); // Вывод PD4 в 1. Выход ШИМ
            TCNT1H = 0x00;
            TCNT1L = 0x00;
    
            // Динамическая индикация
            Shet_ind+=1;
            if (Shet_ind==7)
            {
             PORTC &= 0x70;
             PORTB=0;
            };
            // Подготовка указателя
            if (Ukaz_Herc) //
                {
                    Ukaz_znash = (Ukaz_znash+1)&0x0f;  // 1кГц
                    // Загрузить новое значение ШИМ !!!!!!!
                    OCR1BH = tabl1 [Ukaz_znash][0];
                    OCR1BL = tabl1 [Ukaz_znash][1];
                    if (Ukaz_znash==0) {Kol_period-=1;};
                }
                else
                {
                    Ukaz_znash = (Ukaz_znash+1)&0x07; // 2кГц
                    // Загрузить новое значение ШИМ !!!!!!!
                    OCR1BH = tabl2 [Ukaz_znash][0];
                    OCR1BL = tabl2 [Ukaz_znash][1];
                    if (Ukaz_znash==0){Kol_period-=1;};
    
                };
    
            // 1-Wire Сброс, передача 1, передача 0
            if (Zaxvat1Wire<20000) {Zaxvat1Wire+=1;}; // Инкремент пропущенных захватов
            if (Per1Wire!=0)
                {
                 if (Per1Wire>1) DDR |= _BV(DDD7); // Порт D PD7 на выход. Выход 1-Wire на линии 0
                 //Вставить ожидание 1 мкС
                 QDEL;
                 if (Per1Wire-=1)
                    {
                     DDR &= ~(_BV(DDD7)); // Линия 1-Wire линия 7 порта D на вход. На линии 1
                     Zaxvat1Wire=0; // Сброс инкремента пропущенных захватов
                    };
                };
            // 1-Wire Cчётчик пропущенных захватов фронтов
    
            // Счёт кол периодов
    
            /*****А ТЕПЕРЬ ПОЗНАЙ ИСТИННУЮ БОЛЬ!*****/
            if (Kol_preiod==0)
                {
                    if(Buf_bit)
                    { // Передаем бит
                        //Проверка передаваемого бита
                        if (Buf_bit>1 && Buf_bit<10) // передаем значащие биты
                        {
                        i=0; // Передаем 0
                        if (bit_is_set(Buf_vtor [Buf_baite], Buf_bit-2)) {i=1;}; // Передаем 1
                        };
                        if (Buf_bit==10) i=0; //Передаем старт бит
                        if (Buf_bit==1) i=1; //Передаем старт бит
                        if (i)
                        {Ukaz_Herc = 0x01; Kol_period=10; } // Передаем 1 OCR1AH = 0x01; OCR1AL = 0xF4; Ukaz_znash=0;
                        else
                        {Ukaz_Herc = 0x00; Kol_period=20; } // Передаем 0 OCR1AH = 0x01; 
                        OCR1AL = 0xF4; Ukaz_znash=0;
                        Buf_bit-=1;
                    };
                    if (!Buf_bit)
                    { // Биты кончились меняем байты
                        if(Buf_baite) {Buf_baite -=1; Buf_bit=10;}
                        else
                        {Buf_bit=1;};
                    };
                };
            // Динамическая индикация
            if (Shet_ind==7 && IndOn)
            {
            Shet_ind=0;
            Delitel += 1; //Инкремент дополнительного делителя
            if (!pos) {Brightness_shet=(Brightness_shet+1)%8;};
            PORTB=digits[pos];
            if (Brightness_shet<=Brightness) {PORTC |= 1<<pos;}; //Регулировка яркости
            };
            sei();
    }

    Тут есть всё на любой извращённый вкус. Этот лютый пиздец я отрыл на каких-то распечатаных листах.
    (Листинг 28 страниц, Карл! 28 страниц, 10 шрифтом)

    MiD, 26 Ноября 2015

    Комментарии (29)