История изменений
Исправление MOPKOBKA, (текущая версия) :
Так вот UB на расте типичное...
https://godbolt.org/z/WT16v5vfM
extern "C" {
fn printf(fmt: *const i8, ...) -> i32;
}
pub fn aliasing(a: *mut i32, b: *mut f32) -> i32 {
unsafe {
*a = 1;
*b = 0f32;
return *a;
}
}
fn main() {
let mut i = 0;
i = aliasing(&mut i as *mut i32, &mut i as *mut i32 as *mut f32);
unsafe {
// Печатает 1, должно 0
printf("%d" as *const str as *const i8, i);
}
}
Исходная версия MOPKOBKA, :
Так вот UB на расте типичное...
https://godbolt.org/z/WT16v5vfM
extern "C" {
fn printf(fmt: *const i8, ...) -> i32;
}
pub fn aliasing(a: *mut i32, b: *mut f32) -> i32 {
unsafe {
*a = 1;
*b = 0f32;
return *a;
}
}
fn main() {
let mut i = 0;
i = aliasing(&mut i as *mut i32, &mut i as *mut i32 as *mut f32);
unsafe {
// Печатает 1, должно 0
printf("%d" as *const str as *const i8, i);
}
}