【问题标题】:C Language: Names after the struct-declaration-listC 语言:结构声明列表之后的名称
【发布时间】: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;的语法规则相同

标签: c syntax


【解决方案1】:

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

【讨论】:

  • 非常感谢!现在想想,这实际上有点明显,否则匿名结构将毫无用处。
猜你喜欢
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 2011-07-06
  • 2013-05-19
相关资源
最近更新 更多