在循环之前或内部放置初始化代码更好?

Jac*_*b G 8 c legacy-code

对不起,如果这是一个愚蠢的问题:-)

背景

我有遗留代码,如下所示:

struct {
int field1;
int field2;
int field3;
int field4;
... many many fields
} myStruct;


while (something) {
initialzationFunction(&myStruct);

// ...change fields of myStruct and do stuff.
}
Run Code Online (Sandbox Code Playgroud)

while循环的每次迭代都需要将myStruct初始化为某个东西,假设为零.initialzationFunction将myStruct的所有字段初始化为零.

这个问题

将initialzationFunction保留在while循环中是否合适,或者最好在循环之前调用它一次,如果碰巧更改此代码,让程序员"手动"初始化他们需要的东西.

编辑:不幸的是myStruct是一个全局变量,因此将其作为自动变量不是一个选项,除非我想将它作为参数传递给大量使用它的遗留函数.

我的想法

  • 只是调用initialzationFunction()将防止错误,以防有人修改代码并忘记以后初始化myStruct.
  • 查看哪些特定字段已初始化可能会提供更多信息.
  • 如果稍后在while循环中仅修改了几个字段,则调用所有字段中的initialzationFunction()是多余的.

你会怎么做?

Ste*_*lly 6

如果您要保留代码以供其他人维护,并且代码不是经过验证的热点,则每次都会初始化,因为其他人会引入更少的错误.

如果代码是经过验证的关键热点,则初始化一次并在之后清除代码.

过早优化是万恶之源


P.P*_*.P. 5

由于struct字段在while循环中被更改,因此在每次迭代期间初始化它是有意义的,无论循环中处理的目的是什么.

我会说,即使没有在循环中修改,重新初始化几个字段也没关系.但是,在初始化下一次迭代时,跟踪哪些字段被修改并排除这些字段将是一件麻烦,你可以不用.

另一种方法是使用带有初始化值的临时字符串变量,并在每次迭代开始时简单地指定它.