c语言 - 无效的重新声明"(structure identifier)"



我有一个内部有多个成员的结构,在单独的语句中声明它之后,我似乎无法定义它。为了简单起见,假设它看起来像下面的

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'
};

最新更新