我正在接受一段代码...在linux中编程。我对结构进行了一些小改动
typedef struct {
unsigned int a1;
..
..
..
float f1;
unsigned int a2;
unsigned int a3;
unsigned int offending; // shifted this
} test;
我将unsigned int offending转移到float f1之前,如下所示:
typedef struct {
unsigned int a1;
..
..
..
unsigned int offending;
float f1;
unsigned int a2;
unsigned int a3;
} test;
并且代码崩溃了......可能是什么问题?
c结构的成员顺序是否重要?
答案 0 :(得分:3)
可能是什么问题?取决于其余的代码,以及你做了什么。
不,结构成员的顺序本质上不重要。当其他代码依赖它时就会这样做。
可能的原因(并非详尽无遗):
你真的应该提供它崩溃的细节。否则就是猜测。也许即便如此。
编辑:ht @Jens。
答案 1 :(得分:1)
如果更改数据布局,最可能的崩溃原因是初始化。如果您的代码中有使用声明顺序的旧时初始值设定项,那么字段突然会收到与以前不同的值。因此,C99之后的现代C具有指定的初始化器,可以避免这个问题:
test toto = { 32, ... , 42, }; // sensible to reordering
test tata = { .a1 = 32, ... , .offending = 42, }; // still the same