为什么无法解析此类型?

问题描述 投票:0回答:2

我的C头文件中有以下代码:

typedef struct mb32_packet_t {
  uint8_t compid;
  uint8_t servid;
  uint8_t payload[248];
  uint8_t checksum;
} __attribute__((packed)) mb32_packet_s;

进行以下工作:

struct mb32_packet_t packet;

使用时:

mb32_packet_t packet;

我得到:

Type 'mb32_packet_t' could not be resolved
Unknown type name 'mb32_packet_t'; use 'struct' keyword to refer to the type

typedef struct并非完全用于此目的,即,在定义这种类型的变量时能够省略struct关键字吗?

c struct typedef esp32
2个回答
0
投票

您由typedef定义的别名称为mb32_packet_s。因此,您需要将其用作

mb32_packet_s packet;

struct mb32_packet_t packet;

您也可以将别名重命名为mb32_packet_t

typedef struct mb32_packet_t {
  uint8_t compid;
  uint8_t servid;
  uint8_t payload[248];
  uint8_t checksum;
} __attribute__((packed)) mb32_packet_t;

然后,您可以同时执行两个操作(原始名称不带别名)

struct mb32_packet_t packet;

和(带别名)

mb32_packet_t packet;

这样,别名和结构的名称是相同的,但是从技术上讲,struct mb32_packet_tmb32_packet_t是两个不同的事物,但是它们引用相同的类型。


0
投票

声明typedef struct mb32_packet_t ... mb32_packet_s;使mb32_packet_t成为仅在关键字struct之后起作用的标记,并使mb32_packet_s成为独立起作用的类型名称。要使mb32_packet_t成为类型名称,请在声明中交换它们或在两个地方都使用mb32_packet_t

© www.soinside.com 2019 - 2024. All rights reserved.