【问题标题】:Message "unknown type name 'uint8_t'" in MinGWMinGW 中的消息“未知类型名称'uint8_t'”
【发布时间】:2012-01-21 13:20:29
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

  • 您是否包含stdint.h

标签: c windows mingw


【解决方案1】:

尝试包含stdint.hinttypes.h

【讨论】:

  • 我仍然收到 uint32_t 的错误,但包括 stdint.h 确实解决了其他问题。
  • 对于前者,为了避免警告warning: incompatible implicit declaration of built-in function ‘printf’,可能需要显式添加include <stdio.h>#include <stdint.h>之前)。
【解决方案2】:

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

【讨论】:

  • 为避免出现警告,warning: incompatible implicit declaration of built-in function ‘printf’,可能需要显式添加#include <stdio.h>(在#include <stdint.h> 之前)。
【解决方案3】:

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

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


你需要#include stdint.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>

这行得通。

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

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

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

所以将 stdint.h 移到任何需要它的库上方,您应该不会再收到错误了。

【讨论】:

  • 这只是糟糕的设计,Display.h 应该包含一个#include &lt;stdint.h&gt;。不要依赖包含文件为您包含内容。这就是守卫在这里的目的。
  • 这有点不完整。您能否扩展或提供有关为什么不应包含在源文件中的参考?我的包含不提供库提供的函数所需的类型,所以我认为它们不需要在头文件中。
  • 只要您在任何文件中使用任何标题中的任何内容,您只需将该文件包含在您的源代码中即可。我并没有说你应该在标题中包含所有文件(我做了,但是在你回答之前很久就编辑了)。在我的评论中,我只指出必须在另一个文件之前包含一个文件才能使其工作的设计是多么糟糕。它不会为您节省任何空间或其他任何东西,因为您每次都需要在文件之前将其包含在内。如果你的Display.h需要stdint.h,不直接把include放在里面是不正常的。
  • “我的包含不提供库提供的函数所需的类型”:您的回答和您描述的错误正好相反。
  • 对不起,我不清楚。 “Display.h”没有提供任何功能需要“stdint.h”。这些函数还可以接受在“Display.h”本身中定义的类型。由于实现“display.h”的程序不必也实现“stdint.h”,我认为在程序员不明确输入“#include ' 这样做。
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多