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

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