我有一个内部有多个成员的结构,在单独的语句中声明后我似乎无法定义。为简单起见,假设它看起来如下
typedef struct
{
int number;
int anotherNumber;
char character;
char anotherCharacter;
} MY_STRUCTURE_t;
似乎我应该能够声明结构并在以后定义它,就像我对一个更简单类型的变量一样。例如,
MY_STRUCTURE_t my_structure;
my_structure = {
.number = 1,
.anotherNumber = 42,
.character = '\0',
.anotherCharacter = 'a'
};
上面的代码生成错误:“my_structure”的重新声明无效。很公平,编译器知道的更好。另一方面,以下代码工作正常。
MY_STRUCTURE_t my_structure = {
.number = 1,
.anotherNumber = 42,
.character = '\0',
.anotherCharacter = 'a'
};
中间的片段有什么问题?我缺少一个根本性的缺陷吗?
答案 0 :(得分:2)
这一行:
MY_STRUCTURE_t my_structure;
是一个定义。你说“现在声明并稍后定义”但实际上你所描述的是“现在定义它,然后再分配一个新值”。原始类型也是如此。
在C中,无法直接从括号括起的列表中完成赋值(不是初始化)。但是你可以(在块范围内)从复合文字中分配:
my_structure = (const MY_STRUCTURE_t){
.number = 1,
.anotherNumber = 42,
.character = '\0',
.anotherCharacter = 'a'
};