C:typedef联合

C:typedef联合,c,typedef,microcontroller,unions,microchip,C,Typedef,Microcontroller,Unions,Microchip,在相关问题中未发现任何内容。很可能是super noob,但我还是会问/我的.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_

在相关问题中未发现任何内容。很可能是super noob,但我还是会问/我的.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工具链(以前的高科技C)。编者说:

xbee_api.h:19:警告:缺少基本类型;假定整数
xbee_api.h:19: 错误:“;”应为
xbee_api.h:19:警告:缺少基本类型;假定整数
xbee_api.h:21:警告:缺少基本类型;假定整数

,然后继续(错误太多)

我认为这是uint8,所以我添加了
#include
。不。我认为这是关于名字的,所以我尝试了各种各样的戏剧,比如

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

    };
} API_Packet_0x90;


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

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

您如何知道添加的已定义uint8\t的include?可能尝试添加“typedef unsigned char uint8\u t;”在这个定义之前。。。它要么会有帮助,要么会抱怨你正在重新定义它。你可能需要
\include
用于
uint8\u t
xbee\u api.h:19:
你还可以给出代码的行号吗?至少第一行是多少?如果
\u pack\u struct
是“packet structure”的缩写,我建议不要使用它,以免与“packet structure”混淆,后者是另一回事。我认为这是一个超级愚蠢的错误。就这样。谢谢。或者为未知数据类型添加自己的定义。不需要使用遵循较新版本的C标准的编译器。或者用编译器知道的另一种数据类型搜索并替换该数据类型。你有选择。@dwelch当然你可以自己定义类型,我没有说过任何与此相矛盾的话。但是要找到stdint.h头,必须使用更新的编译器,正如我在文章中所写的那样。
typedef union {
    uint8_t packet[];
    struct _pack_struct {

    };
} API_Packet_0x90;