“(结构标识符)”

时间:2016-05-11 22:52:28

标签: c struct

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

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

中间的片段有什么问题?我缺少一个根本性的缺陷吗?

1 个答案:

答案 0 :(得分:2)

这一行:

MY_STRUCTURE_t my_structure;

是一个定义。你说“现在声明并稍后定义”但实际上你所描述的是“现在定义它,然后再分配一个新值”。原始类型也是如此。

在C中,无法直接从括号括起的列表中完成赋值(不是初始化)。但是你可以(在块范围内)从复合文字中分配:

my_structure = (const MY_STRUCTURE_t){
    .number = 1,
    .anotherNumber = 42,
    .character = '\0',
    .anotherCharacter = 'a'
};