1
いくつかのlibc関数。 sigemptyset(set: *mut sigset_t)
変数へのポインタをとり、初期化されていないものとして扱い、初期化します。初期化されていない変数を宣言する方が良い方法
私はこのコードで終わる:
let mut newmask = std::mem::uninitialized();
libc::sigemptyset(&mut newmask);
これはOKですが、私はこのようなもので、私が終わるこれらの変数の多くを持っている場合:
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ステートメントが実際にタプルを行い、これを「初期化されていない」として指定し、その後タプルを3つの変数に「分解」するという新しいことがありました。不気味な! :) – hansaplast
うわー、それは私が今まで読んだことがある危険な機能のための最良のドキュメントです。ポインタありがとう! (意図された馬小屋) –