我的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关键字吗?
您由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_t
和mb32_packet_t
是两个不同的事物,但是它们引用相同的类型。
声明typedef struct mb32_packet_t ... mb32_packet_s;
使mb32_packet_t
成为仅在关键字struct
之后起作用的标记,并使mb32_packet_s
成为独立起作用的类型名称。要使mb32_packet_t
成为类型名称,请在声明中交换它们或在两个地方都使用mb32_packet_t
。