消息“未知类型名称‘uint8_t’”在MinGW中

发布于 2024-12-28 03:11:25 字数 71 浏览 0 评论 0原文

我在 MinGW 中使用 C 得到“未知类型名称 'uint8_t'” 和其他类似的信息。

我该如何解决这个问题?

I get "unknown type name 'uint8_t'" and others like it using C in MinGW.

How can I solve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

旧城空念 2025-01-04 03:11:25

尝试包含 stdint.hinttypes.h

Try including stdint.h or inttypes.h.

も让我眼熟你 2025-01-04 03:11:25

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

To use the uint8_t type alias, you have to include the stdint.h standard header.

青春有你 2025-01-04 03:11:25

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

在这一点上,我对讨论/捍卫该示例的优点没什么兴趣,但我将保留它,因为它说明了编译过程中的一些细微差别以及它们为何会导致错误。


您需要在 #include 任何其他需要它的库接口之前#include stdint.h。

示例:

我的 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>

这有效。

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

#include <string.h>
#include <avr/io.h>
#include <Display.h>
#include <GlobalTime.h>
#include <stdint.h>

我会收到您描述的错误。这是因为 Display.h 需要来自 stdint.h 的内容,但它无法访问它,因为该信息是在 Display.h 之后编译的。已编译。

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

To be clear: If the order of your #includes matters and it is not part of your design pattern (read: you don't know why), then you need to rethink your design. Most likely, this just means you need to add the #include to the header file causing problems.

At this point, I have little interest in discussing/defending the merits of the example, but I will leave it up as it illustrates some nuances in the compilation process and why they result in errors.


You need to #include the stdint.h before you #include any other library interfaces that need it.

Example:

My LCD library uses uint8_t types. I wrote my library with an interface (Display.h) and an implementation (Display.c).

In display.c, I have the following includes.

#include <stdint.h>
#include <string.h>
#include <avr/io.h>
#include <Display.h>
#include <GlobalTime.h>

And this works.

However, if I rearrange them like so:

#include <string.h>
#include <avr/io.h>
#include <Display.h>
#include <GlobalTime.h>
#include <stdint.h>

I get the error you describe. This is because Display.h needs things from stdint.h, but it can't access it because that information is compiled after Display.h is compiled.

So move stdint.h above any library that needs it and you shouldn't get the error any more.

悲凉≈ 2025-01-04 03:11:25

我必须包含“PROJECT_NAME/osdep.h”,其中包括特定于操作系统的配置。

我会使用您感兴趣的类型查看其他文件,并找到它们的定义位置/方式(通过查看包含)。

I had to include "PROJECT_NAME/osdep.h" and that includes the OS-specific configurations.

I would look in other files using the types you are interested in and find where/how they are defined (by looking at includes).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文