我正在尝试自己在蓝牙编程中,并遇到了我不理解的问题。基本上,当我使用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;