是否有可能对某些结构成员设置默认值? 我尝试以下,但它会导致语法错误:
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’
结构是一种数据类型 。 你不为数据类型给出的值。 你的数据类型实例/对象给出的值。
因此,没有,这是不可能的C.
相反,你可以写一个函数,它确实为结构实例的初始化。
或者,你可以这样做:
struct MyStruct_s
{
int id;
} MyStruct_default = {3};
typedef struct MyStruct_s MyStruct;
然后总是初始化新的实例为:
MyStruct mInstance = MyStruct_default;
我同意,你不能在定义在C结构的时候初始化阿尔斯但是你可以创造实例如下图所示的时间初始化结构。
在C,
struct s {
int i;
int j;
};
struct s s_instance = { 10 ,20 };
在C ++中其可能给出如下所示结构的定义直接值
struct s {
int i;
s(): i(10)
{
}
};
你可以使用一些功能如下初始化结构,
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);
}
创建一个默认的结构作为其他的答案也提到:
struct MyStruct
{
int flag;
}
MyStruct_default = {3};
然而,上面的代码不会在头文件的工作-你会得到错误: multiple definition of 'MyStruct_default'
。 为了解决此问题,使用extern
而不是在头文件:
struct MyStruct
{
int flag;
};
extern const struct MyStruct MyStruct_default;
而在c
文件:
const struct MyStruct MyStruct_default = {3};
希望这有助于具有头文件困难的人。
一个初始化函数的结构是给予它的默认值的好方法:
Mystruct s;
Mystruct_init(&s);
或者更短:
Mystruct s = Mystruct_init(); // this time init returns a struct
另一种方法为默认值。 并用同一类型与结构的初始化函数。 拆分大的代码到单独的文件时,这种做法是非常有用的。
struct structType{
int flag;
};
struct structType InitializeMyStruct(){
struct structType structInitialized;
structInitialized.flag = 3;
return(structInitialized);
};
int main(){
struct structType MyStruct = InitializeMyStruct();
};