【问题标题】:C: typedef unionC: typedef 联合
【发布时间】:2013-01-07 14:34:25
【问题描述】:

在相关问题中没有找到任何内容。很可能是超级菜鸟,但无论如何我都会问/我的 .h 文件中有以下内容:

typedef union _API_Packet_0x90{
    uint8_t packet[26];
    struct _pack_struct {
        uint8_t start;
        uint8_t length[2];
        uint8_t addr64[8];
        uint8_t addr16[2];
        uint8_t options;
        uint8_t rfData[4];
        uint8_t chksum;
    };
} API_Packet_0x90;

API_Packet_0x90 ap90;

这是微控制器的代码,我使用的是 xc8 工具链(以前的 Hi Tech C)。编译器说:

xbee_api.h:19:警告:缺少基本类型;整数假设
xbee_api.h:19: 错误: ”;”预计
xbee_api.h:19:警告:缺少基本类型;整数假设
xbee_api.h:21:警告:缺少基本类型;整数假设

,然后继续(错误太多)

我以为是uint8_t,所以加了#include <ctypes.h>。没有。我以为是名字的问题,所以我尝试了各种玩法,例如

typedef union {
    uint8_t packet[26];
    struct _pack_struct {

    };
} API_Packet_0x90;

typedef union {
    uint8_t packet[];
    struct _pack_struct {

    };
} API_Packet_0x90;

或其他。没有什么帮助。我被困住了,因为我相信我正确地遵循了语法。有什么帮助吗?

【问题讨论】:

  • 你怎么知道你添加的包含定义的 uint8_t ?也许尝试添加'typedef unsigned char uint8_t;'在那个定义之前......要么它会有所帮助,要么它会抱怨你正在重新定义它。
  • 您可能需要#include <stdint.h> 才能获得uint8_t
  • xbee_api.h:19: 你也可以给你代码的行号吗?至少第一行有多少?这样我们就可以知道哪条线出了问题。
  • 如果_pack_struct 是“packet structure”的缩写,我建议不要使用它,以免与“packed structure”混淆,后者是另一回事。

标签: c typedef microcontroller unions microchip


【解决方案1】:

uint8_t 位于stdint.h,而不是ctype.h(也没有ctypes.h,不存在这样的头文件)。您必须使用遵循较新版本 C 标准的编译器才能找到此标头(C99 或 C11 标准)。

【讨论】:

  • 我认为这是一个超级愚蠢的错误。就是这样。谢谢。
  • 或为未知数据类型添加您自己的定义。不需要使用遵循 C 标准较新版本的编译器。或者搜索并用编译器知道的另一种数据类型替换数据类型。你有选择。
  • @dwelch 当然你可以自己定义类型,我没有说任何反驳的。但是要找到头文件 stdint.h,您必须使用更新的编译器,如我的帖子中所述。
猜你喜欢
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多