我正在努力更好地理解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"用于任何事情,或只是被忽略?这有什么原因不是错误吗?
感谢您阅读本文!
答案 0 :(得分:5)
结构定义之后放置的名称是该结构类型范围内的变量。在这种情况下,Raw_data_struct
是该匿名结构类型的变量。