typedef struct vs struct - 'struct'的存储大小不知道

时间:2018-03-23 13:04:12

标签: c++ c struct

我正在尝试自己的蓝牙编程并且遇到了这个我不明白的问题。基本上,当我使用typedef struct defintion时,编译器会抛出错误:

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 __((packed))

的问题

以前关于typedef结构的stackoverflow帖子没有帮助我(typedef struct vs struct definitions),因为我不知道如何使用 typedef结构在main方法中进行struct初始化工作 (而不是我目前已注释掉的版本)。因为蓝牙头文件都像这样定义它们的结构所必需的东西。

所以:

  • 如何使用 typedef struct 使main方法中的struct初始化工作?
  • 为什么我的代码不起作用?

感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:1)

Typedef和structs有两个不同的命名空间。这意味着typedef l2cap_cmd_hdr与struct struct l2cap_cmd_hdr不同。

您正在尝试创建后者的实例,该实例不存在。您确实有一个匿名结构的实例,其类型定义为l2cap_cmd_hdr,因此您可以创建:

l2cap_cmd_hdr head;