未知类型名称'uint8_t',MinGW

Rob*_*ock 61 c windows mingw

我得到了"未知类型名称'uint8_t'",其他人喜欢在MinGW中使用C语言.任何想法如何解决这个问题?

cni*_*tar 125

尝试包括stdint.hinttypes.h.

  • 我仍然收到 uint32_t 的错误,但包括 stdint.h 确实解决了其他问题。 (2认同)

oua*_*uah 16

要使用uint8_t类型别名,您必须包含stdint.h标准标头.


Lan*_*Pad 5

编辑:

要清楚:如果您#include的顺序很重要,并且不是设计模式的一部分(请阅读:您不知道为什么),那么您需要重新考虑您的设计。最有可能的是,这仅意味着您需要将#include头文件添加到导致问题的头文件中。

在这一点上,我对讨论/捍卫该示例的优点并不感兴趣,但由于它说明了编译过程中的一些细微差别以及它们为什么导致错误的原因,因此将其保留下来。

结束编辑

你需要#includestdint.h在你#include需要它的任何其他库接口。

例:

我的LCD库使用uint8_t类型。我用接口(Display.h)和实现(Display.c)编写了我的库

在display.c中,我具有以下内容。

#include <stdint.h>
#include <string.h>
#include <avr/io.h>
#include <Display.h>
#include <GlobalTime.h>
Run Code Online (Sandbox Code Playgroud)

这可行。

但是,如果我这样重新排列它们:

#include <string.h>
#include <avr/io.h>
#include <Display.h>
#include <GlobalTime.h>
#include <stdint.h>
Run Code Online (Sandbox Code Playgroud)

我得到您描述的错误。这是因为Display.h需要信息,stdint.h但无法访问它,因为该信息是在Display.h编译后编译的。

因此,将其移到stdint.h需要它的任何库之上,您就不会再收到该错误。

  • 那只是糟糕的设计,`Display.h`应该包含一个#include &lt;stdint.h&gt;。不要依靠包含文件来为您包含事物。那就是头防线的作用。 (17认同)
  • 对不起,我不清楚。“ Display.h”没有提供功能,需要“ stdint.h”。这些函数还可以接受在“ Display.h”本身中定义的类型。因为实现“ display.h”的程序也不必实现“ stdint.h”,所以我认为在没有程序员明确键入“ #include &lt;stdint”的情况下公开“ stdint.h”库也不是一件好事。 .h&gt;'这样做。 (3认同)