sizeof(double)
은 항상 sizeof(void*)
보다 크거나 같다고 가정하는 것이 안전합니까?sizeof (double)> = sizeof (void *)를 사용하는 것이 안전합니까?
어떤 상황에서 이것을 넣으려면 다음과 같은 휴대용? 나는 그것을 테스트 한 몇 가지 시스템에
int x = 100;
double tmp;
union {
double dbl;
void* ptr;
} conv;
conv.ptr = (void*)&x;
tmp = conv.dbl;
conv.dbl = tmp;
printf("%d\n", *((int*)conv.ptr));
It does work,하지만 난이 sizeof(void*) > sizeof(double)
경우 끔찍하게 잘못 가고 볼 수 있습니다.
그것은 UB AFAIK입니다. – RedX
아니요, 그렇게 생각하는 것은 안전하지 않습니다. 'void * '가 16 바이트가되지 않는 이유는 무엇입니까? 그 어떤 것도 금지하지 않습니다. –
@RedX C11에서는 더 이상 UB가 아닙니다. 물론 그 전에였습니다. –