Правильно ли определена следующая программа или она может вызвать неопределенное поведение?
#include <assert.h>
#include <stdio.h>
int main(void)
{
float x, y;
int i;
assert(sizeof (x) == sizeof (i));
x = 3.14;
i = *(int *) &x;
y = *(float *) &i;
printf("%f %f\n", x, y);
return 0;
}
Если это может вызвать неопределенное поведение, есть ли другой способ изменить тип значения с плавающей запятой на целочисленный тип без изменить битовую комбинацию значения?
Редактировать:
Я пытаюсь реализовать макрос, аналогичный
#define CONV(T, n) ((T) (n))
, но который не изменяет битовая комбинация n.