我有一个内部有多个成员的结构,在单独的语句中声明它之后,我似乎无法定义它。为了简单起见,假设它看起来像下面的
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 = ' ',
.anotherCharacter = 'a'
};
上面的代码生成一个错误:"无效的"my_structure"的重新声明"。公平地说,编译器更清楚。另一方面,以下代码运行良好。
MY_STRUCTURE_t my_structure = {
.number = 1,
.anotherNumber = 42,
.character = ' ',
.anotherCharacter = 'a'
};
中间的代码段有什么问题?我有没有遗漏一个根本的缺陷?
此行:
MY_STRUCTURE_t my_structure;
是一个定义。你说"现在声明它,以后定义它",但实际上你描述的是"现在定义它,以后分配一个新值"。基本体类型也是如此。
在C中,赋值(而不是初始化)不能直接从大括号括起来的列表中完成。但你可以(当然是在块范围内)从一个复合文字中赋值:
my_structure = (const MY_STRUCTURE_t){
.number = 1,
.anotherNumber = 42,
.character = ' ',
.anotherCharacter = 'a'
};