这里我有以下struct
typedef struct d {
unsigned int size: 20;
} D;
问题是默认变量size
如何成为10
。谢谢你的!
在C语言中,类型不能为变量指定默认值。或者你需要使用带有构造函数的c++,或者在实例化变量时系统地初始化它。
在C语言中没有默认值或构造函数这类东西。您必须编写一个函数,用一些默认值初始化struct
。或者,您可以切换到c++,并创建一个构造函数,用一些默认值初始化struct
的成员。
关于unsigned int size: 20
中: 20
的含义,请参阅此处。
这是维基百科关于位域的文章
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
同样,您可以使用"复合文字"技术来创建更复杂的构造函数,可能带有参数。
要使结构体成员的值为默认值,应该使用类似于OOP语言中构造函数的概念。
typedef struct d {
unsigned int size;
} D{20};
这样,无论何时创建该结构的对象,都可以为该结构的成员指定默认值…
希望它能帮助…:)