Meldung “unbekannter Typname ‘uint8_t'” in MinGW

Lesezeit: 4 Minuten

Benutzeravatar von RobotRock
RobotRock

Ich bekomme “unbekannter Typname ‘uint8_t'” und andere mögen es mit C in MinGW.

Wie kann ich das lösen?

  • hast du aufgenommen stdint.h?

    – Nekrolis

    21. Januar 2012 um 13:22 Uhr

Versuchen Sie es einzuschließen stdint.h oder inttypes.h.

  • Ich bekomme immer noch den Fehler für uint32_t, aber das Einschließen von stdint.h hat die anderen gelöst.

    – RobotRock

    21. Januar 2012 um 13:31 Uhr

  • Für erstere, um eine Verwarnung zu vermeiden, warning: incompatible implicit declaration of built-in function ‘printf’muss es möglicherweise explizit hinzugefügt werden include <stdio.h> (Vor #include <stdint.h>).

    – Peter Mortensen

    26. April 2021 um 13:25 Uhr


Benutzeravatar von ouah
ouah

Um die zu verwenden uint8_t Geben Sie den Alias ​​ein, Sie müssen den einschließen stdint.h Standardkopfzeile.

  • Um eine Abmahnung zu vermeiden, warning: incompatible implicit declaration of built-in function ‘printf’muss es möglicherweise explizit hinzugefügt werden #include <stdio.h> (Vor #include <stdint.h>).

    – Peter Mortensen

    26. April 2021 um 13:45 Uhr


Benutzeravatar von LanchPad
LanchPad

Deutlich sein: Wenn die Bestellung von Ihnen #includes wichtig ist und es nicht Teil Ihres Designmusters ist (sprich: Sie wissen nicht warum), dann müssen Sie Ihr Design überdenken. Höchstwahrscheinlich bedeutet dies nur, dass Sie die hinzufügen müssen #include zur Header-Datei, die Probleme verursacht.

An dieser Stelle habe ich wenig Interesse daran, die Vorzüge des Beispiels zu diskutieren/zu verteidigen, aber ich lasse es stehen, da es einige Nuancen im Kompilierungsprozess veranschaulicht und warum sie zu Fehlern führen.


Du musst #include das stdint.h Vor Sie #include alle anderen Bibliotheksschnittstellen, die es benötigen.

Beispiel:

Meine LCD-Bibliothek verwendet uint8_t-Typen. Ich habe meine Bibliothek mit einer Schnittstelle geschrieben (Display.h) und eine Implementierung (Display.c).

Im display.cIch habe die folgenden beinhaltet.

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

Und das funktioniert.

Wenn ich sie jedoch so umstelle:

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

Ich bekomme den von dir beschriebenen Fehler. Das ist weil Display.h braucht Dinge aus stdint.haber es kann nicht darauf zugreifen, da diese Informationen kompiliert werden nach Display.h wird kompiliert.

Also bewege dich stdint.h über jeder Bibliothek, die es benötigt, und Sie sollten den Fehler nicht mehr erhalten.

  • Das ist einfach schlechtes Design, Display.h sollte ein enthalten #include <stdint.h>. Verlassen Sie sich nicht darauf, dass die Include-Datei Dinge für Sie einschließt. Dafür sind Header Guards da.

    – Jerska

    26. Juli 2014 um 1:32 Uhr


  • Das ist etwas unvollständig. Können Sie erweitern oder einen Hinweis darauf geben, warum Includes nicht in der Quelldatei enthalten sein sollten? Meine Includes stellen keine Typen bereit, die von den Funktionen der Bibliothek benötigt werden, daher würde ich nicht glauben, dass sie in der Header-Datei enthalten sein müssen.

    – LanchPad

    30. Juli 2014 um 16:04 Uhr

  • Sobald Sie irgendetwas aus irgendeinem Header in einer beliebigen Datei verwenden, fügen Sie diese Datei einfach in Ihre Quelle ein. Ich habe nicht gesagt, dass Sie alle Dateien in den Header aufnehmen sollten (naja, ich habe es getan, aber lange bearbeitet, bevor Sie geantwortet haben). In meinem Kommentar weise ich nur darauf hin, wie schlecht es ist, eine Datei vor einer anderen einfügen zu müssen, damit es funktioniert. Es spart Ihnen keinen Platz oder was auch immer, da Sie dies jedes Mal vor Ihrer Datei einschließen müssen. Wenn dein Display.h braucht stdint.hist es nicht normal, das Include nicht direkt darin zu platzieren.

    – Jerska

    31. Juli 2014 um 8:01 Uhr

  • “Meine Includes stellen keine Typen bereit, die von den Funktionen der Bibliothek benötigt werden” : Ihre Antwort und der von Ihnen beschriebene Fehler sagten genau das Gegenteil.

    – Jerska

    31. Juli 2014 um 8:02 Uhr

  • Entschuldigung, ich war unklar. Keine von ‘Display.h’ bereitgestellte Funktion BRAUCHT ‘stdint.h’. Die Funktionen können auch Typen akzeptieren, die in ‘Display.h’ selbst definiert sind. Da es für ein Programm, das ‘display.h’ implementiert, nicht notwendig ist, auch ‘stdint.h’ zu implementieren, denke ich nicht, dass es gut wäre, die ‘stdint.h’-Bibliothek bereitzustellen, ohne dass der Programmierer explizit ‘#include ‘ dazu.

    – LanchPad

    31. Juli 2014 um 18:31 Uhr

Benutzeravatar von John b
John b

Ich musste “PROJECT_NAME/osdep.h” einschließen, und das schließt die betriebssystemspezifischen Konfigurationen ein.

Ich würde in anderen Dateien nach den Typen suchen, an denen Sie interessiert sind, und herausfinden, wo/wie sie definiert sind (indem Sie sich die Includes ansehen).

1419170cookie-checkMeldung “unbekannter Typname ‘uint8_t'” in MinGW

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy