【发布时间】:2018-11-17 19:24:46
【问题描述】:
我试图更好地理解 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);
据我了解,问题在于结构的名称放错了位置,这意味着该结构是匿名定义的,因此在使用 typedef 时名称“Raw_data_struct”不可用。
但是,编译器对该名称做了什么?我检查了cpp reference 网站,但他们只提到了两种类型的结构声明,其中一种是定义。该定义似乎没有考虑到 struct-declaration-list 之后的任何内容。然而,我尝试过的任何编译器都没有将其识别为错误(我尝试了 gcc 和 clang)。
我想了解如何使用结构声明。名称“Raw_data_struct”是用于任何用途,还是只是被忽略?这不是错误有什么原因吗?
感谢您阅读本文!
【问题讨论】:
-
覆盖
int x;的语法规则相同