C语言:struct-declaration-list之后的名称

时间:2018-06-07 19:15:18

标签: c syntax

我正在努力更好地理解C,在尝试理解我自己犯的错误时,我遇到了this个问题。我最终明白我做错了什么,但那个问题的代码令我感到困惑:

struct {
      uint8_t time;
      uint8_t type;
      uint8_t phase;
      uint8_t status;
} Raw_data_struct;

typedef struct Raw_data_struct Getst_struct;

void Getst_resp(Getst_struct Data);

据我了解,问题是结构的名称放在了错误的位置,这意味着结构是匿名定义的,因此名称" Raw_data_struct"使用typedef时无法使用。

然而,编译器对名称做了什么?我检查了cpp reference网站,但他们只提到了两种类型的结构声明,其中一种是定义。在struct-declaration-list之后,该定义似乎没有任何允许。然而,我没有尝试过的编译器确定这是一个错误(我尝试了gcc和clang)。

我想了解如何使用struct声明。名称是" Raw_data_struct"用于任何事情,或只是被忽略?这有什么原因不是错误吗?

感谢您阅读本文!

1 个答案:

答案 0 :(得分:5)

结构定义之后放置的名称是该结构类型范围内的变量。在这种情况下,Raw_data_struct是该匿名结构类型的变量。