2011-04-07 37 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 

此外,您还可以使用“复合文字”技术来创建更复杂的构造,或许与参数。