Неа.
Да. Ты сделал fistp [esp]; pop eax по сути и удивляешься, а чего это оно. Как написал, так и оно. Нужно было *(uint32_t *)&x (строго говоря UB), union или memcpy(). Все три разворачиваются в mov при достаточной оптимизации. union самый сбалансированный в этом смысле, memcpy() самый безопасный.
О, действительно сработало с memcpy. Только 4 строки пришлось написать, но это ладно. Умный компилятор))
GCC ок, а вот MSVC не любит memcpy() c -Od.
Короче, понятно. Как обычно, миллиард условностей. И register ещё этот, который вообще ничего не делает. С - Скользкий.
Обсуждают сегодня