これがばかげた質問ならごめんなさい:-)
バックグラウンド
私は次のようなレガシーコードを持っています:
struct {
int field1;
int field2;
int field3;
int field4;
... many many fields
} myStruct;
while (something) {
initialzationFunction(&myStruct);
// ...change fields of myStruct and do stuff.
}
whileループを繰り返すたびに、myStructが何かに初期化される必要があります。たとえばゼロとしましょう。initialzationFunctionは、myStructのすべてのフィールドをゼロに初期化します。
質問
initialzationFunctionをwhileループ内に保持するのは良いですか、それともループの前に1回呼び出して、プログラマーがこのコードを変更した場合に必要なものを「手動で」初期化するのがよいでしょう。
編集:残念ながら、myStructはグローバル変数であるため、自動変数にすることは、それを使用する多数のレガシー関数にパラメーターとして渡したい場合を除いて、オプションではありません。
私が思うこと
- initialzationFunction()を呼び出すだけで、誰かがコードを変更し、後でmyStructを初期化するのを忘れた場合のバグを防ぐことができます。
- どの特定のフィールドが初期化されているかを確認する方が有益な場合があります。
- whileループの後半で変更されるフィールドが少ない場合は、すべてのフィールドを初期化するinitialzationFunction()の呼び出しは冗長です。
あなたならどうしますか?