是否可以为某些结构成员设置默认值?我尝试了以下但是,它会导致语法错误:
typedef struct
{
int flag = 3;
} MyStruct;
Run Code Online (Sandbox Code Playgroud)
错误:
$ 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’
Run Code Online (Sandbox Code Playgroud)
Alo*_*ave 104
结构是一种数据类型.您不为数据类型赋值.您为数据类型的实例/对象赋值.
所以在C中不可能做到这一点.
相反,您可以编写一个函数来执行结构实例的初始化.
或者,您可以这样做:
struct MyStruct_s
{
int id;
} MyStruct_default = {3};
typedef struct MyStruct_s MyStruct;
Run Code Online (Sandbox Code Playgroud)
然后始终将新实例初始化为:
MyStruct mInstance = MyStruct_default;
Run Code Online (Sandbox Code Playgroud)
Chi*_*sai 16
我同意Als在C中定义结构时无法初始化.但是您可以在创建实例时初始化结构,如下所示.
在C中,
struct s {
int i;
int j;
};
struct s s_instance = { 10 ,20 };
Run Code Online (Sandbox Code Playgroud)
在C++中,它可以直接赋予结构定义,如下所示
struct s {
int i;
s(): i(10)
{
}
};
Run Code Online (Sandbox Code Playgroud)
正如其他答案所提到的那样,创建一个默认结构:
struct MyStruct
{
int flag;
}
MyStruct_default = {3};
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码在头文件中不起作用 - 你会得到错误:multiple definition of 'MyStruct_default'. 要解决此问题,请extern在头文件中使用:
struct MyStruct
{
int flag;
};
extern const struct MyStruct MyStruct_default;
Run Code Online (Sandbox Code Playgroud)
在c文件中:
const struct MyStruct MyStruct_default = {3};
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助任何在头文件方面遇到问题的人。
更重要的是,要添加现有答案,您可以使用隐藏结构初始值设定项的宏:
#define DEFAULT_EMPLOYEE { 0, "none" }
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中:
employee john = DEFAULT_EMPLOYEE;
Run Code Online (Sandbox Code Playgroud)