头文件中有一个c结构:-

typedef struct sample
{
char *member1;
char **member2;
long *member3;
unsigned int member4;
} example;

我在同一个头文件中声明了一个默认的typedef变量:-
const example defaultValue;

defaultValue的定义在c文件中:-
const example defaultValue =
{
NULL,
NULL,
NULL,
99
};

现在在另一个c文件中如果我这样做了,
example example1 = defaultValue;

所有成员都按预期分配为空-但“unsigned int member4”的分配值为0,而不是99。这很奇怪,因为defaultValue.member4是99。有人能解释一下这种不寻常的行为吗?有没有更好的方法来进行默认结构初始化?

最佳答案

您希望头文件声明如下:

extern const example defaultValue;

这样就不会遇到对象的多个定义的问题。如果没有defaultValue说明符,则每个转换单元(包括头)都将定义extern的实例,这将导致未定义的行为。
您希望它们都引用您在问题中描述的.c文件中的一个,这就是defaultValue说明符将为您做的事情。

关于c - C结构到结构的分配-目标结构中的值不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4776844/

10-12 16:21