头文件中有一个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/