2011-01-23 46 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