c++ - typedef struct 与 struct - ‘struct' 的存储大小未知

标签 c++ c struct

<分区>

我正在尝试蓝牙编程,遇到了这个我不明白的问题。基本上,当我使用 typedef 结构定义时,编译器会抛出错误:

temp_testcode.c:11:23:错误:“head”的存储大小未知

通过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 方法中进行结构初始化工作 (而不是我当前注释掉的版本)。这是必要的,因为蓝牙头文件都这样定义它们的结构。

所以:

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

感谢您的宝贵时间和帮助!

最佳答案

Typedef 和结构在两个不同的命名空间中。这意味着 typedef l2cap_cmd_hdr 不同于结构 struct l2cap_cmd_hdr

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

l2cap_cmd_hdr head;

关于c++ - typedef struct 与 struct - ‘struct' 的存储大小未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49450359/

相关文章:

android - NDK PIE 二进制文件在运行时显示链接器警告

pointers - 由于自动生成的指针,无法在消息中嵌入消息

c++ - 如何检查Qt中的当前光标形状

c++ - 使用 memset 初始化整个数组

c++ - 响应 inotify 并打印事件的程序

asynchronous - 为什么在结果上使用匹配语句会出现 "expected type Future"错误?

C++两个头文件相互包含

c++ - 类型转换成员函数指针

c - 如何正确使用 libsodium 以使其在版本之间兼容?

c - 是否可以从 erlang 节点启动外部二进制应用程序?