带有默认值的c结构?

发布于 2024-10-30 20:33:15 字数 168 浏览 3 评论 0原文

这里我有以下struct

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

问题是默认变量size如何为10。谢谢你的!

Here I have the following struct

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

the question is how the default variable size be 10. Thank your!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

时光瘦了 2024-11-06 20:33:15

在 C 中,类型不能为变量指定默认值。您需要将 C++ 与构造函数一起使用,或者在实例化变量时系统地初始化它。

In C, types cannot specify default values for variables. Either you need to use C++ with a constructor, or to systematically initialize your variable when you instantiate it.

眸中客 2024-11-06 20:33:15

在 C 中,没有默认值或构造函数之类的东西。您必须编写一个函数来使用一些默认值初始化struct。或者,您可以切换到 C++ 并创建一个构造函数,该构造函数将使用一些默认值初始化 struct 的成员。

In C there no such thing as default values or constructors. You would have to write a function that initializes the struct with some default values. Alternatively you can switch to C++ and make a constructor that would initialize the members of the struct with some default values.

紫瑟鸿黎 2024-11-06 20:33:15

有关 : 20 的信息,请参阅此处unsigned int size: 20表示。

这是关于位字段的维基百科文章。

See here for information on what : 20 in unsigned int size: 20 mean.

Here is the wikipedia article on bit fields.

尸血腥色 2024-11-06 20:33:15

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

此外,您可以使用“复合文字”技术来创建更复杂的构造函数,也许可以使用论据。

pratik’s suggestion will work (assuming his use of typedef is a typo), but it leaves a global object floating around. An alternative technique:

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

The C99 version has the advantage that it can catch some misuse of the “constructor”, e.g.,

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

Also, you can use the “compound literal” technique to create more complicated constructors, perhaps with arguments.

合约呢 2024-11-06 20:33:15

为了使结构成员的值成为默认值,您应该使用类似于 OOP 语言中构造函数概念的东西。

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

通过这种方式,您可以在创建该结构的对象时为结构成员指定默认值...

希望它有帮助..: )

For making a value of a structure member default u should use something similar to a constructor's concept in OOP languages..

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

This way you can specify default values for structure members wenever you create an object of that structure...

Hope it helps.. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文