我正在尝试自己的蓝牙编程并且遇到了这个我不明白的问题。基本上,当我使用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初始化工作 (而不是我目前已注释掉的版本)。因为蓝牙头文件都像这样定义它们的结构所必需的东西。
所以:
感谢您的时间和帮助!
答案 0 :(得分:1)
Typedef和structs有两个不同的命名空间。这意味着typedef l2cap_cmd_hdr
与struct struct l2cap_cmd_hdr
不同。
您正在尝试创建后者的实例,该实例不存在。您确实有一个匿名结构的实例,其类型定义为l2cap_cmd_hdr
,因此您可以创建:
l2cap_cmd_hdr head;