typedef struct vs struct - "struct"的存储大小未知



我正在尝试自己在蓝牙编程中,并遇到了我不理解的问题。基本上,当我使用typedef struct定义时,编译器会引发错误:

temp_testcode.c:11:23: error: storage size of ‘head’ isn’t known

通过gcc temp_testcode.c编译的代码如下:

#include <stdint.h>
typedef struct {
    uint8_t     code;
    uint8_t     ident;
    uint16_t    len;
} __attribute__ ((packed)) l2cap_cmd_hdr;
/**
struct l2cap_cmd_hdr {
    uint8_t     code;
    uint8_t     ident;
    uint16_t    len;
};
*/
int main(int argc ,char* argv[]) {
    struct l2cap_cmd_hdr head;
}

尽管一旦我使用构造的较低定义(当前已注释(,代码编译完好无损。因此,要么是 typedef struct 的问题,要么与__attribute __(((包装(((

先前关于Typedef structs的Stackoverflow帖子对我没有帮助(Typedef struct vs struct定义(,因为我不知道如何使用 typedef struct在主方法中的结构初始化工作。(而不是我当前评论的版本(。由于蓝牙标头文件都这样定义了它们的结构,因此必要的东西是必要的。

so:

  • 如何使用 typedef struct
  • 在主方法中进行结构初始化。
  • 为什么我的代码不起作用?

感谢您的时间和帮助!

typedefs和structs在两个不同的名称空间中。这意味着Typedef l2cap_cmd_hdr与结构struct l2cap_cmd_hdr不同。

您正在尝试创建后者的实例,但不存在。您确实有一个匿名结构的实例,该结构被键入l2cap_cmd_hdr,因此您可以创建:

l2cap_cmd_hdr head;

最新更新