В заголовке вне моего контроля есть это:
typedef union {
char * v_charp;
int v_int;
float v_float;
} value_t;
typedef struct var {
char *name;
value_t value;
} variable;
#define VARIABLE_DEF(Name, Value) {Name, {(char*)Value}}
Они ожидают, что в моем коде я сделаю что-то вроде этого:
variable my_variables[2] = {
VARIABLE_DEF("Variable 1", 1),
VARIABLE_DEF("Variable 2", 2)
};
Кто бы ни писал это, очевидно, не считал, что вы можете инициализировать объединение литералом с плавающей точкой. Поэтому мне нужно выяснить, как преобразовать литерал с плавающей точкой в целое число с таким же битовым шаблоном. Если бы я мог использовать промежуточную переменную, это было бы легко:
float tmp;
variable my_variables[2] = {
VARIABLE_DEF("Variable 1", tmp = 1.1f, *((unsigned int *)(&tmp))),
VARIABLE_DEF("Variable 2", tmp = 2.2f, *((unsigned int *)(&tmp)))
};
Но вы не можете использовать переменные в инициализаторах структуры. Что еще я могу сделать?