Некоторые функции libc, например. sigemptyset(set: *mut sigset_t)
возьмите указатель на переменную, рассматривайте ее как неинициализированную и инициализируйте ее.Лучший способ объявить неинициализированные переменные
Я заканчиваю с этим кодом:
let mut newmask = std::mem::uninitialized();
libc::sigemptyset(&mut newmask);
Это нормально, но когда у меня есть многие из этих переменных я в конечном итоге с чем-то вроде этого:
let mut newmask = std::mem::uninitialized();
let mut oldmask = std::mem::uninitialized();
let mut pendmask = std::mem::uninitialized();
я мог конденсироваться его:
use std::mem::unitialized as uninit;
let (mut newmask, mut oldmask, mut pendmask) = (uninit(), uninit(), uninit());
Есть ли лучший способ написать этот код? В образовательных целях я явно хочу использовать libc.
Я знал, что «неинициализированный» опасен. Я просто использую их, чтобы позволить функциям FFI писать им. Что нового, что оператор let на самом деле делает кортеж, и вы можете указать это как «uninitialized», а затем кортеж «разобран» на три переменные. Ужасный! :) – hansaplast
Вау, это лучшая документация для опасной функции, которую я когда-либо читал. Спасибо за указатель! (Каламбур не предназначен) –