【发布时间】:2017-11-13 10:10:44
【问题描述】:
我可以访问这个项目。它是在 Keil µvision 5 中编译的。当我编译项目时,它没有错误。但是,当我访问头文件时,它显示一个错误,说 s8 变量有以下错误 = error: unknown type name 's8'.
typedef struct
{
s8 str[PARAM_TEXT_SIZE];
}
text_struct;
变量定义如下:
typedef char s8;
不知是我编译器配置错误,还是编译后忽略了这个错误。
PS:这是我在 StackOverflow 网站上的第一个问题。抱歉,如果我的问题不清楚或放置错误。
【问题讨论】:
-
谁定义了变量,在哪里?这些文件位于哪些文件中?
s8不是标准的。此外,将char键入为带符号的 8 是一个非常糟糕的主意,因为它可以是无符号的。你应该做的(从 1999 年开始)是使用stdint.h而不是一些自制的垃圾类型。 -
@Lundin '(自 1999 年以来)' --> 自您的交叉编译器提供商意识到 21 世纪是一件事的那一年。 在 198X 中哭泣。 (无论如何,ARM 编译器都是最新的)
-
你好@Lundin,正如我所说,我得到了这个代码。通常,我会使用你所说的'stdint.h'。但是,这是一个大代码(超过 100k 代码行),并且这个变量在代码中被广泛使用。它在 arm 微控制器的“typedef_arm.h”文件中定义。它被定义为有符号变量,因为它对微控制器的二进制计算很重要。
-
如果这段代码来自一个头文件,那么这个头文件完全有可能没有包含
s8的 typedef 所需的包含,但是包含有这个错误的文件确实包含它,所以在编译时没有问题,但静态地说头是不完整的。
标签: c compiler-errors header-files