Цитата(LeonidPr @ 13.10.2015, 14:11 ) | Компилятор ругается, что i_min_value, i_max_value не определены |
Как-то это иначе делается, http://en.cppreference.com/w/c/language/struct_initialization.
Цитата(LeonidPr @ 13.10.2015, 14:11 ) | Могу ли я быть уверен, что компилятор не приведет 0.5f к uint32_t например и не получит 0? |
По умолчанию инициализируется первый член объединения. Проведите эксперимент:Код | typedef union { struct { int32_t i_max_value; int32_t i_min_value; }; struct { uint32_t ui_max_value; uint32_t ui_min_value; }; struct { float f_max_value; float f_min_value; }; } range_t;
typedef struct { int mi_type; unsigned char *mi_ptr; range_t mi_range; } map_item_t;
int main( void ) { map_item_t item = { 1, 0, {0.9f, 0.5f} }; printf( "imax = %d, imin = %d\n", item.mi_range.i_max_value, item.mi_range.i_min_value); printf( "fmax = %f, fmin = %f\n", item.mi_range.f_max_value, item.mi_range.f_min_value); return 0; }
|
Получите нули, как и должно быть.
Добавлено через 49 секунд Пока писал ответ, не видел ответа volatile))) |