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