【发布时间】:2012-09-11 10:07:49
【问题描述】:
对不起,如果这是一个愚蠢的问题:-)
背景
我的旧代码如下所示:
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循环里面好不好, 还是在循环之前调用一次更好,如果他们碰巧更改了这段代码,让程序员“手动”初始化他们需要的东西。
编辑:不幸的是 myStruct 是一个全局变量,因此不能将其设为自动变量,除非我想将它作为参数传递给大量使用它的旧函数。
我的想法
- 只需调用 initialzationFunction() 即可防止出现错误,以防有人修改代码并忘记稍后初始化 myStruct。
- 查看初始化了哪些特定字段可能会提供更多信息。
- 如果稍后在 while 循环中只修改少数字段,则调用初始化所有字段的 initialzationFunction() 是多余的。
你会怎么做?
【问题讨论】:
-
“你会做什么”——除非有性能问题或堆栈大小问题,否则我会在循环内定义并初始化
myStruct作为自动变量。 -
Steve - 所以你赞成调用 initialzationFunction() ?因为结构有很多字段,自动变量有什么帮助?您仍然需要调用 initialzationFunction(),除非您想手动初始化所有字段,这需要大量代码。
-
它会将变量限制在它应该使用的范围内,并具有适当的生命周期(将“它需要重新初始化”替换为“我们使用一个新的、已初始化的对象”) .定义和初始化将是相同的,但不必担心如何最好地重用对象,循环的每次迭代都使用自己的独立对象。这就是我默认编写代码的方式,直到出现其他一些要求。显然,如果结构是 27MB,并且循环的每次迭代只使用一个字段(每次不同的字段),那么其他要求就会侵入;-)
标签: c legacy-code