C中struct成员的默认值
是否有可能为一些结构成员设置默认值? 我尝试了以下,但会导致语法错误:
typedef struct { int flag = 3; } MyStruct;
错误:
$ gcc -o testIt test.c test.c:7: error: expected ':', ',', ';', '}' or '__attribute__' before '=' token test.c: In function 'main': test.c:17: error: 'struct <anonymous>' has no member named 'flag'
结构是一种数据types 。 你不给数据types的值。 你给数据types的实例/对象赋值。
所以在C中这是不可能的
相反,你可以写一个函数来完成结构实例的初始化。
或者,您可以这样做:
struct MyStruct_s { int id; } MyStruct_default = {3}; typedef struct MyStruct_s MyStruct;
然后始终将您的新实例初始化为:
MyStruct mInstance = MyStruct_default;
我同意Als在C中定义结构的时候不能初始化,但是你可以在创build实例时初始化结构,如下所示。
在C中,
struct s { int i; int j; }; struct s s_instance = { 10 ,20 };
在C ++中它可能给结构的定义有直接的价值,如下所示
struct s { int i; s(): i(10) { } };
你可以使用一些函数来初始化struct,如下所示,
typedef struct { int flag; } MyStruct; MyStruct GetMyStruct(int value) { MyStruct My = {0}; My.flag = value; return My; } void main (void) { MyStruct temp; temp = GetMyStruct(3); printf("%d\n", temp.flag); }
编辑:
typedef struct { int flag; } MyStruct; MyStruct MyData[20]; MyStruct GetMyStruct(int value) { MyStruct My = {0}; My.flag = value; return My; } void main (void) { int i; for (i = 0; i < 20; i ++) MyData[i] = GetMyStruct(3); for (i = 0; i < 20; i ++) printf("%d\n", MyData[i].flag); }
给结构的初始化函数是一个很好的方式来给它默认值:
Mystruct s; Mystruct_init(&s);
甚至更短:
Mystruct s = Mystruct_init(); // this time init returns a struct