|
|
1
4
从你上面写的我看不出有什么不对。我能想到两件事:
跟进: 既然你还没有找到错误,我就不再看你的结构了。有人曾经写过“先找马,后找斑马”。也就是说,这个错误可能不是一个奇异的错误。您在单元测试中有多少覆盖范围?我假设这是遗留代码,几乎总是意味着0%,或者至少这是我的经验。这准确吗? |
|
|
2
6
如果该结构在任何地方被序列化/反序列化,请务必注意代码的该部分。 仔细检查分配内存的代码区域。 |
|
|
3
4
|
|
|
4
2
没有什么。一切。这完全取决于如何、在何处以及为什么使用它。 假设您所讨论的这个结构是一个C风格的POD,并且代码是最简单的,那么您就可以不受惩罚了。但是,当您尝试更雄心勃勃的事情时,您至少要处理对齐问题(取决于创建对象的方式和位置)和填充。如果这是C++,你的POD包含自定义操作符/ Ccor等,那么你就陷入了很多麻烦。如果您依赖endianness等,可能会出现跨平台问题。 |
|
|
5
2
如果代码有一组健壮的单元测试,那么追踪问题可能会容易得多(您征求了设计建议;) 我假设在这个庞大的代码库中,您不需要在任何地方都使用新的“c”变量,您只是添加它,以便在添加或修改的代码中使用它?您可以创建一个新的结构bar,它包含一个foo对象和c,而不是将c添加到foo中。然后在需要的地方使用酒吧。 至于真正的bug,它可能是任何信息很少的东西,但是如果我不得不猜测,我会说有人在某处使用了一个神奇的数字而不是sizeof()。 |
|
|
6
1
还可以在文件中搜索
|
|
|
7
1
Pimpl / d-Pointer 是一种允许您在不破坏兼容性的情况下扩展或重新设计类的更大自由度的策略。 例如,如果您最初编写
您可以轻松地将其扩展到
不破坏任何现有的(已编译的!)代码使用
|
|
|
8
0
如果该代码用于通过网络传输数据,则可能会破坏某些功能。 |
|
|
9
0
作为旁白,当我看到typedef FOO。。。结构FUO,就像一个人试图让C代码看起来像C++一样。我意识到我在这里是少数:) |
|
|
10
0
在C结构的末尾添加新元素总是安全的。事件,如果该结构被传递到不同的进程。重新编译的代码将看到新的结构成员,而未编译的代码将只知道旧的结构大小,并读取其知道的旧成员。 这里的警告是,新成员必须添加到结构的末端而不是在中间。 |