具有默认值的C结构体



这里我有以下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};

这样,无论何时创建该结构的对象,都可以为该结构的成员指定默认值…

希望它能帮助…:)

最新更新