- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 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'овым указателем?
CrashTesterAnusov 03.11.2016 17:59 # −63
huesto 03.11.2016 18:21 # +1
MiD 03.11.2016 18:26 # 0
huesto 03.11.2016 22:55 # 0
barop 03.11.2016 22:56 # −63
huesto 03.11.2016 21:42 # 0
Видимо в этом хуйня и заключается?
bormand 03.11.2016 23:17 # +1
Ну, например, чтобы тебе по адресу адреса что-нибудь положили:
guest 04.11.2016 00:32 # +2
Найди в коде ошибку
bormand 04.11.2016 07:01 # 0
Antervis 04.11.2016 09:38 # +2
Gay 03.11.2016 22:03 # 0
guest 04.11.2016 14:51 # −63