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

    +322

    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
    #include <math.h>
    #include <stdio.h>
    
    double  DoubleToTheInt(double base, int power) {
        return pow(base, power);
    }
    
    int main() {
        // приводим к указателю на функуцию с обратным порядком аргументов
        double (*IntPowerOfDouble)(int, double) =
            (double (*)(int, double))&DoubleToTheInt;
    
        printf("(0.99)^100: %lf \n", DoubleToTheInt(0.99, 100));
        printf("(0.99)^100: %lf \n", IntPowerOfDouble(100, 0.99));
    }

    "Изящный способ отстрелить себе ногу по самую голову."
    Утащено с Хабры.

    Vindicar, 15 Августа 2016

    Комментарии (71)
  2. Си / Говнокод #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)
  3. Си / Говнокод #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)
  4. Си / Говнокод #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)
  5. Си / Говнокод #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)
  6. Си / Говнокод #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)
  7. Си / Говнокод #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)
  8. Си / Говнокод #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)
  9. Си / Говнокод #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)
  10. Си / Говнокод #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)