У меня есть союз, хорошо.
Этот союз находится внутри структуры, и этот союз безымянный (что-то вроде этого).
typedef enum TYPES {INT, FLOAT, CHAR, POINTER TO FUNCTION /* Please pay attention on this */};
typedef struct {
TYPES type;
union {
int integer;
float real;
char letter;
char *string;
/* here we have a pointer to function syntax but I don't remember how to write it right now*/
}
} MY_STRUCT;
Я инициализирую свою структуру таким образом.
MY_STRUCT test = {INT, 22};
Хорошо, я знаю, что это работает, потому что по определению, когда я использую этот тип инициализации, будет использоваться самое первое поле объединения.
Итак, вопрос:
что произойдет, если я напишу инициализацию таким образом?
MY_STRUCT test = {INT, 22.2};
После того, как я попытаюсь получить значение с плавающей запятой, я получу правильное значение?
float var = (float)test.real;
Будет ли это показывать правильные вещи?
Будет ли это работать для каждого типа? Даже указатель на функцию один?
Я спрашиваю об этом, потому что по определению эта инициализация помещает значение в самое первое поле моего объединения, поэтому есть ли проблема, если float больше, чем int? Я этого не знаю, поэтому я знаю об указателе на функцию, что иногда он может быть больше, чем int, поэтому мне нужно написать свой союз с указателем, чтобы он функционировал как самый первый член?
Я читал, что GCC поддерживает каламбуры типов, и даже ядро Linux использует каламбуры типов. Поэтому я боюсь только того, смогу ли я использовать такую инициализацию в этой структуре и после этого получить правильные значения.