2011-04-07 39 views

回答

2

在C中,類型不能指定變量的默認值。要麼你需要使用C++構造函數,要麼在實例化時系統地初始化變量。

1

在C中沒有默認值或構造函數。你必須編寫一個函數,用一些默認值初始化struct。或者,您可以切換到C++並創建一個構造函數,以便使用某些默認值初始化struct的成員。

1

有關: 20unsigned int size: 20的含義的信息,請參閱here

這是關於bit fields的維基百科文章。

0

爲了使結構成員默認ü應在OOP語言使用類似構造函數的概念東西..

typedef struct d { 
    unsigned int size; 
} D{20}; 

這種方式可以爲wenever您創建的對象結構的成員指定默認值的值該結構...

希望它能幫助.. :)

+0

'typedef'應該在那裏嗎? – 2011-04-07 18:43:16

+0

沒有它不需要..我只是忽略它..只是複製他的代碼,並將其粘貼在這裏... – pratik 2011-04-08 05:43:17

+0

我的意思是它比不需要更糟糕:它試圖做'typedef結構d D;'_and_'struct d D = {20};' - 它甚至不會像這樣編譯。看到我的答案。 – 2011-04-08 15:47:07

1

pratik的建議將工作(假設他使用的typedef是一個錯字),但它留下一個全局對象左右浮動。另一種技術:

struct d { 
    unsigned int size; 
}; 
/* use only *one* of these next lines */ 
#define D (struct d){20} // C99 
#define D {20}    // C89 
… 
struct d foo = D;   // in either case 

的C99版本具有的優點是它可以趕上「構造」,例如一些濫用

struct d { 
    unsigned int size; 
}; 
#define D99 (struct d){.size = 20} 
#define D89 {20} 
… 
float a[17] = D89; // compiles, but is that really what you meant? 
float b[17] = D99; // will not compile 

此外,您還可以使用「複合文字」技術來創建更復雜的構造,或許與參數。