我在头文件中有一个 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;
所有成员都按预期分配了 NULL - 但“unsigned int member4”的分配值是 0 而不是 99。这很奇怪,因为 defaultValue.member4 是 99。有人可以解释一下这种不寻常的行为吗?有没有更好的方法来进行默认结构初始化?
最佳答案
您希望您的头文件像这样声明 defaultValue
:
extern const example defaultValue;
这样您就不会遇到不止一个对象定义的问题。如果没有 extern
说明符,您将让每个翻译单元(包括 header )定义 defaultValue
的实例,这会导致未定义的行为。
您希望它们都引用您在问题中描述的 .c 文件中的文件,这就是 extern
说明符将为您做的。
关于C 结构到结构赋值 - 目标结构中的值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776844/