con*_*sed 0 c structure variable-assignment
我在头文件中有ac结构: -
typedef struct sample
{
char *member1;
char **member2;
long *member3;
unsigned int member4;
} example;
Run Code Online (Sandbox Code Playgroud)
我在同一个头文件中声明了一个默认的typedef变量: -
const example defaultValue;
Run Code Online (Sandbox Code Playgroud)
defaultValue的定义在c文件中: -
const example defaultValue =
{
NULL,
NULL,
NULL,
99
};
Run Code Online (Sandbox Code Playgroud)
现在在一个不同的c文件中,如果我这样做,
example example1 = defaultValue;
Run Code Online (Sandbox Code Playgroud)
所有成员都按预期分配NULL - 但是"unsigned int member4"被赋值为0而不是99.这很奇怪,因为defaultValue.member4是99.有人可以解释一下这种不寻常的行为吗?有没有更好的方法来进行默认的struct初始化?
你会希望你的头文件声明defaultValue如下:
extern const example defaultValue;
Run Code Online (Sandbox Code Playgroud)
所以你不会遇到对象的多个定义的问题.如果没有说明extern符,您将拥有定义实例的每个转换单元(包括标题)defaultValue,这会导致未定义的行为.
您希望它们都引用您在问题中描述的.c文件文件中的那个,这是说明extern符将为您执行的操作.
| 归档时间: |
|
| 查看次数: |
592 次 |
| 最近记录: |