有没有办法用默认的初始化值声明一个结构?
我有一个头文件,它定义了这样的结构:
typedef struct struc_s
{
size_t cost const = 2000;
size_t dmg const = 100;
size_t def const = 100;
size_t hull const = 1500;
size_t shield const = 300;
size_t capacity const = 2;
size_t destruc const = 10;
} struc_t;
但这种做法不起作用。
我也可以在这个头文件中声明一个类型为struc_t
的var。但我记得没错。我必须在c文件中将其转换为extern
我想要做的是每个包含此标头的位置我希望能够var = struc_s.dmg
,结果应该是var保存值100
。
但我不想在标题中的其他地方声明struc_s。有没有办法存档这种行为?
答案 0 :(得分:1)
typedef struct struc_s
{
int a;
int b;
}s;
这是类型定义而不是对象的声明。您可以在声明对象时初始化。
当给出连续成员时,使用C89样式的初始化器。
s obj={1,2};
对于非连续或无序成员列表,可以使用指定的初始化方式
s obj={.a=1,.b=2};
or
s obj={.b=2,.a=1};
第三种方法是复制相同类型的现有对象的值
s obj1=obj;
答案 1 :(得分:1)
不是你想要的方式。
当你做一个typedef时,你要定义一个内存区域的形状,这个过程不同于分配和填充它。
可能的替代方案:
typedef struct
{
size_t cost;
size_t dmg;
size_t def;
size_t hull;
size_t shield;
size_t capacity;
size_t destruc;
} struc_t;
#ifndef DEFAULT_STRUC_VALUES_DEFINED
#define DEFAULT_STRUC_VALUES_DEFINED
const struc_t DEFAULT_STRUC = {
.cost = 2000,
.dmg = 100,
.def = 100,
.hull = 1500,
.shield = 300,
.capacity = 2,
.destruc = 10
};
#endif
然后当你想要创建一个新的时候:
struc_t *new_struc = malloc(sizeof(struc_t));
memcpy(new_struc, DEFAULT_STRUC, sizeof(struc_t));
作为旁注,您是否有理由对结构成员使用size_t
?它没有任何内在错误,但它可能会因平台而异。