我正在编写一个程序,该程序使用许多必须清理/更新/初始化的结构等等。我目前正在使用类似以下代码的内容来处理它们:
typedef struct Thing { ... } Thing;
typedef void (*ProcessThing)(Thing * target);
const int ThingCount = 3;
Thing ListOfThings[ThingCount];
Thing * ThingA = ListOfThings[0];
Thing * ThingB = ListOfThings[1];
Thing * ThingC = ListOfThings[2];
int DoStuffToThings(ProcessThing Action){
int i;
for(i = 0; i < ThingCount; i++){
(*Action)(ListOfThings[i]);
}
}
ThingA
,ThingB
和ThingC
(等等)在编译时是已知的,但是当我开发程序时,它们的确切数量/性质正在发生变化。
此设置的主要好处是,如果需要,我可以通过添加另一个定义行并递增ThingN
轻松添加更多ThingCount
,并且可以使用更多{以新的方式轻松处理事物列表{1}}&#39; S
这不是我经常在示例代码中看到的一种技术,即使看起来它有用也是如此。我没有很多C语言的实践经验,并担心这种方法可能存在一些我没有看到的问题。有这样的问题,还是我过度紧张?