1. Си / Говнокод #20526

    +9

    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
    #include <stdio.h>
    
    int main () {
      
        double x[] = {
            1.9282931897870177e+161,
            6.011232102429883e+175,
            5.8184620471502e+180,
            // 6.01123210243e+175,
            3.7209743448696e-294,
        }, *y = (void*)x + 1;
        
        for(int i = 1; i < sizeof(x) / sizeof(double); ++i)
            *x = x[i], printf("%s\n", y);
        
    }

    http://ideone.com/pzuJEx

    Nastenka1998, 11 Августа 2016

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

    +3

    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)
  3. Си / Говнокод #20511

    +3

    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
    #define RETURN 100
    
    void interrupt[INT0_vect] INT0_interrupt(void)
    {
        char i,temp;
    
        /*Filter it to makes sure it was not only noise*/
        for (temp= 0;temp< 5;)          //Five samples noise filter
        	{
    	if(!(PIND & (1<<PD2)))
              temp++;
            else
              temp = RETURN;          
            }                           
            if(temp != RETURN)
              {
                
              /*Place your zero cross action here*/
    
              ...
    
              }
            
    }

    Application note code for showing how to implement a zero cross detector on AVR only with one external interrupt pin.

    govnokod3r, 10 Августа 2016

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

    +5

    1. 1
    2. 2
    #define KO(s) (sizeof(s) - 1)
    #define KOKO(s) s, KO(s)

    Это типа чтобы в функции rooster(const char *s, unsigned len) пихать кококомпайл-тайм константы: rooster(KOKO("kokoko"));

    Этим самым делая прототип и вызов функции разными. Зачем?

    codemonkey, 02 Августа 2016

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

    +4

    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)
  6. Си / Говнокод #20418

    +2

    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
    Имеем приблизительно такой код
    
    #define XXX(n) ar[n]=s._field_##n;
    XXX(01);
    XXX(02);
    XXX(03);
    XXX(04);
    XXX(05);
    XXX(06);
    XXX(07);
    XXX(08);
    
    Естесвенно при при компиляции получаем ошибку, т.к. 08 это неправильная восмеричная константа. Обойти можно так
    
    #define XXX(n) ar[1##n-100]=s._field_##n;
    
    Но как-то это некрасиво. Может есть более красивый подход?

    https://www.linux.org.ru/forum/development/12607523

    j123123, 24 Июля 2016

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

    +1

    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
    void CL_SendDisconnectMessage( void )
    {
    	sizebuf_t	buf;
    	byte	data[32];
    
    	if( cls.state == ca_disconnected ) return;
    
    	BF_Init( &buf, "LastMessage", data, sizeof( data ));
    	BF_WriteByte( &buf, clc_stringcmd );
    	BF_WriteString( &buf, "disconnect" );
    
    	if( !cls.netchan.remote_address.type )
    		cls.netchan.remote_address.type = NA_LOOPBACK;
    
    	// make sure message will be delivered
    	Netchan_Transmit( &cls.netchan, BF_GetNumBytesWritten( &buf ), BF_GetData( &buf ));
    	Netchan_Transmit( &cls.netchan, BF_GetNumBytesWritten( &buf ), BF_GetData( &buf ));
    	Netchan_Transmit( &cls.netchan, BF_GetNumBytesWritten( &buf ), BF_GetData( &buf ));
    }

    Ну чтоб наверняка.

    mittorn, 22 Июля 2016

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

    +1

    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
    static PyObject *
    binascii_b2a_qp_impl(PyModuleDef *module,
                         Py_buffer *data,
                         int quotetabs,
                         int istext,
                         int header)
    {
      Py_ssize_t in, out;
      const unsigned char *databuf;
      ....
      if ((databuf[in] > 126) ||
          (databuf[in] == '=') ||
          (header && databuf[in] == '_') ||
          ((databuf[in] == '.') && (linelen == 0) &&
          (databuf[in+1] == '\n' || databuf[in+1] == '\r' ||
                                     databuf[in+1] == 0)) ||
          (!istext && ((databuf[in] == '\r') ||
                       (databuf[in] == '\n'))) ||
          ((databuf[in] == '\t' || databuf[in] == ' ') &&
               (in + 1 == datalen)) ||
          ((databuf[in] < 33) &&
           (databuf[in] != '\r') && (databuf[in] != '\n') &&
           (quotetabs ||
          (!quotetabs && ((databuf[in] != '\t') && // <=
                 (databuf[in] != ' '))))))
      {
      ....
      }
      ....
    }

    Pyhon source https://habrahabr.ru/company/pvs-studio/blog/306204/
    теперь я ничему не удивляюсь

    Lokich, 22 Июля 2016

    Комментарии (29)
  9. Си / Говнокод #20402

    0

    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
    Timer_Overflow_Interrupt(void)
    {
    switch(TMR_State)			// Обработчик прерывания по переполнению
    	{
    	case 0:	
    		{ 
    		Clr_Pin();		// Вывод в 0
    		TCNT = 255-100; 	// Задержка в 100 (до переполнения)
    		TMR_State = 1; 		// Следующая стадия 1
    		Break;			// Выход
    		}
     
    	case 1:	
    		{ 
    		Set_Pin();
    		TCNT = 255-1; 
    		TMR_State = 2; 
    		Break;
    		}
     
    	case 2:	
    		{ 
    		Clr_Pin();
    		TCNT = 255-5; 
    		TMR_State = 3; 
    		Break;
    		}
     
    	case 3:	
    		{ 
    		Set_Pin();
    		TCNT = 255-2; 
    		TMR_State = 4; 
    		Break;
    		}
     
    	case 4:	
    		{ 
    		Clr_Pin();
    		TCNT = 255-3; 
    		TMR_State = 5; 
    		Break;
    		}
     
    	case 5:	
    		{ 
    		Set_Pin();
    		TCNT = 255-4; 
    		TMR_State = 6; 
    		Break;
    		}
     
    	case 6:
    		{ 
    		Clr_Pin();
    		Timer_OFF(); 		// Выключаем таймер. Работа окончена
    		TMR_State = 0; 		// Обнуляем состояние
    		Break;			
    		}
     
    	default: 	break;		
    	}
    }

    http://easyelectronics.ru/avr-uchebnyj-kurs-konechnyj-avtomat.html

    А не лучше ли сделать массив указателей на функции, каждая из которых будет соответствовать case-у, и пусть там оно вызывает из массива фукнцию под номером TMR_State? Притом вот эту хню TMR_State = 1; TMR_State = 2; TMR_State = 3; которая дублируется во всех этих case-ах, ее ж можно хуйнуть всего один раз, типа TMR_State = (TMR_state+1)%7. Хотя для AVR контроллеров это скорее всего будет дорогая операция, так что можно хуйнуть TMR_State = TMR_state == 7 ? 0 : TMR_state+1;

    j123123, 20 Июля 2016

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

    0

    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
    switch (k) {
    ........
                case DN:
                    if (mnu_cnt != (cnt - 1)) goto Do_Ent_Key;
                    break;
            }
            if (k == HOME || k == END || k == RIGHT || k == LEFT) {
                local_out_str(s_menu[mnu_old].menu_name, x + pos[mnu_old], y + 1, s_menu[mnu_old].len, color_item);
                local_out_str(s_menu[mnu_cnt].menu_name, x + pos[mnu_cnt], y + 1, s_menu[mnu_cnt].len, color_sel);
    
                if (s_menu[mnu_cnt].id_exe == 0 && Action != 0)  goto Do_Ent_Key;
            }
    .........
            switch (i) {
                case ENT:
                    if (mnu_cnt == (cnt - 1)) {
                        i = 'Q';
                        break;
                    }
    ............
                    Do_Ent_Key:
                        if (s_menu[mnu_cnt].id_exe == 0) {
                            strncpy(st1, s_menu[mnu_cnt].level, 7);
                            len = st_l(st1, 7);
                            st1[len] = '0';
                        }
    ............
                        break;
            }

    rjhdby, 20 Июля 2016

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