0

CHARFORMAT 構造体など、構造体の各メンバーの値を明示的に設定しないのは悪い習慣ですか? 次のように、すべてを 1 行で初期化することを宣言できます。

 CHARFORMAT foo = {sizeof(CHARFORMAT),CFM_FACE,0,0,0,0,0,0,"Arial"};

私は特にこの方法が好きです。入力が大幅に減るだけでなく、_tcscpy などを呼び出して szFaceName の文字列値にコピーする必要がないからです。これが速いかどうかはわかりませんし、速いかどうかはどうでもいいですし、コンパイラや SDK ライブラリなどを移植したり変更したりするつもりはありません。

私が知りたいのは、この方法で初期化を行うことによる影響がある可能性があるということだけです? もしそうなら、そこに含まれるリスクは単純に問題に値しないのでしょうか? このように構造体をすべて一緒に初期化することを避け、明示的に行うべきですか?

4

1 に答える 1

-1

エラーが発生しやすく、読みにくいため、私はそれをしません。コードを調整する必要がある場合、イニシャライザを誤って挿入または削除する (または間違ったものを置き換える) のは簡単です。

コンパイラにほとんどのメンバーをゼロで初期化させることで、入力の一部を回避できることに注意してください。

CHARFORMAT foo = { 0 };
foo.cbSize = sizeof foo;
foo.dwMask = CEM_FACE;
_tcscpy_s(foo.szFaceName, _countof(foo.szFaceName), T("Arial"));

残念ながら、このstrcpy呼び出しを回避することはできません (特に、Microsoft コンパイラは C99 指定の初期化子をサポートしていないため)。

于 2012-05-21T08:14:10.430 に答える