对不起,如果这是一个愚蠢的问题:-)
我有遗留代码,如下所示:
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是一个全局变量,因此将其作为自动变量不是一个选项,除非我想将它作为参数传递给大量使用它的遗留函数.
你会怎么做?
如果您要保留代码以供其他人维护,并且代码不是经过验证的热点,则每次都会初始化,因为其他人会引入更少的错误.
如果代码是经过验证的关键热点,则初始化一次并在之后清除代码.
过早优化是万恶之源
由于struct字段在while循环中被更改,因此在每次迭代期间初始化它是有意义的,无论循环中处理的目的是什么.
我会说,即使没有在循环中修改,重新初始化几个字段也没关系.但是,在初始化下一次迭代时,跟踪哪些字段被修改并排除这些字段将是一件麻烦,你可以不用.
另一种方法是使用带有初始化值的临时字符串变量,并在每次迭代开始时简单地指定它.