2011-01-23 48 views
0

我在头文件AC结构: -C结构到结构的任务 - 在目标结构不正确的值

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

我已经宣布在同一头文件中的默认类型定义变量: -

const example defaultValue; 

默认值的定义在C文件: -

const example defaultValue = 
{ 
NULL, 
NULL, 
NULL, 
99 
}; 

现在在不同的C文件,如果我这样做,

example example1 = defaultValue; 

所有成员被分配NULL预期 - 但“无符号整型member4”分配的0而不是99.这是很奇怪的,因为defaultValue.member4为99。可有人请解释这种异常行为的价值?有没有更好的方法来做一个默认的结构初始化?

+0

您发布的代码甚至无法编译。你也可能错过了其他的东西。 – detunized 2011-01-23 22:10:30

+0

确保第二个const在其他文件中正确引用。如果不是的话,你最终会得到(有可能)example1,结果被零填充。 – payne 2011-01-23 22:10:42

+0

请编辑您的帖子以从实际源文件中直接复制代码。正如几个人所观察到的,您发布的代码无法编译 - 更不用说给出您报告的行为。所以帮助你是不可能的,因为我们必须猜测代码的外观。 – 2011-01-23 22:16:49

回答

5

你会想你的头文件中声明defaultValue像这样:

extern const example defaultValue; 

这样你就不会与对象的多个定义遇到的问题。如果没有extern说明符,您将需要每个翻译单元(包括标题)定义defaultValue的实例,这会导致未定义的行为。

你希望它们都指的是你在问题中描述的.c文件中的文件,这是extern说明符会为你做的。

1

您的示例似乎包含多个错误(struct缺少其r,并且struct的字段定义应以分号而不是逗号结尾)。

此外,如果您的defaultValue在另一个源文件中,则应在头中声明它为extern