- 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
Было:
typedef struct {
int range; /*enabled flag*/
union {
struct {
unsigned str_length;
};
struct {
long i_min;
long i_max;
};
struct {
double d_min;
double d_max;
};
/* ... */
};
} wlp_range_t;
#define WLP_NO_RANGE() { .range = FALSE }
#define WLP_STRING_LENGTH(length) { .range = TRUE, .str_length = length}
#define WLP_INT_RANGE(min, max) { .range = TRUE, .i_min = min, .i_max = max }
#define WLP_FLOAT_RANGE(min, max) { .range = TRUE, .d_min = min, .d_max = max }
Стало:
typedef struct {
int range; /*enabled flag*/
struct {
struct {
unsigned str_length;
};
struct {
long i_min;
long i_max;
};
struct {
double d_min;
double d_max;
};
/* ... */
};
} wlp_range_t;
#define WLP_NO_RANGE() { B_FALSE, { {0} } }
#define WLP_STRING_LENGTH(length) { B_TRUE, { {length} } }
#define WLP_INT_RANGE(min, max) { B_TRUE, { {0}, {min, max} } }
#define WLP_FLOAT_RANGE(min, max) { B_TRUE, { {0}, {0, 0}, {min, max} } }
#define WLP_SIZE_RANGE(min, max) { B_TRUE, { {0}, {0, 0}, {0.0, 0.0}, {min, max} } }
/* ... */
Такая вот бяка получилась при портировании проекта с GCC на Visual C. А все потому, что:
1. ISO C++03 8.5.1[dcl.init.aggr]/15:
| When a union is initialized with a brace-enclosed initializer,
| the braces shall only contain an initializer for the first member of the union.
2. Visual C не поддерживает designated initializers
LispGovno 24.12.2012 12:08 # 0
myaut 24.12.2012 12:09 # +4
С некрофилией - это к Тарасу
bormand 24.12.2012 15:04 # +3
P.S. А как отличали, какие члены юниона юзать в каждой ситуации? Никакой инфы об этом в структурке не видно...
myaut 24.12.2012 15:15 # +1
bormand 24.12.2012 15:21 # +1
...смерть его на конце иглы, игла в яйце, яйцо в утке, утка в зайце...
LispGovno 24.12.2012 12:10 # −4
Гэцэцизм (sic!)
LispGovno 24.12.2012 12:11 # +4
Dummy00001 25.12.2012 18:27 # 0
последный раз я на эту тему читал, это был gcc-ism.
Steve_Brown 24.12.2012 13:07 # 0
Sauron 24.12.2012 13:56 # +7
TarasB 24.12.2012 17:10 # +2
defecate-plusplus 24.12.2012 19:31 # +3
я понимаю было бы но мешать огурцы и молоко - вот и получилось что получилось