Unterschied zwischen stdint.h und inttypes.h

Lesezeit: 3 Minuten

Benutzeravatar von mahmood
Mahmud

Was ist der Unterschied zwischen stdint.h und inttypes.h?

Wenn keiner von ihnen verwendet wird, wird uint64_t nicht erkannt, aber bei beiden handelt es sich um einen definierten Typ.

  • inttypes.h #includes stdint.h.

    – Herr Schickadance

    29. September 2011 um 12:56 Uhr

Benutzeravatar von Mikko Östlund
Mikko Östlund

stdint.h

Das Einschließen dieser Datei ist die “Mindestanforderung”, wenn Sie mit den Integer-Typen von C99 mit angegebener Breite arbeiten möchten (dh int32_t, uint16_t etc.). Wenn Sie diese Datei einschließen, werden Sie erhalten die Definitionen dieser Typensodass Sie diese Typen in Deklarationen von Variablen und Funktionen verwenden und Operationen mit diesen Datentypen ausführen können.

inttypes.h

Wenn Sie diese Datei einschließen, werden Sie erhält alles, was stdint.h bereitstellt (weil inttypes.h stdint.h enthält), aber Sie wird auch Einrichtungen zum Tun bekommen printf und scanf (und fprintf, fscanf, usw.) mit diesen Typen auf portable Weise. Sie erhalten zum Beispiel die PRIu64 Makro, damit Sie können printf a uint64_t so was:

#include <stdio.h>
#include <inttypes.h>
int main (int argc, char *argv[]) {

    // Only requires stdint.h to compile:
    uint64_t myvar = UINT64_C(0) - UINT64_C(1);

    // Requires inttypes.h to compile:
    printf("myvar=%" PRIu64 "\n", myvar);  
}

Ein Grund, den Sie verwenden möchten printf mit inttypes.h ist das zB so uint64_t ist long unsigned unter Linux aber long long unsigned unter Windows. Wenn Sie also nur stdint.h (nicht inttypes.h) einschließen würden, müssten Sie Folgendes tun, um den obigen Code zu schreiben und ihn zwischen Linux und Windows kompatibel zu halten (beachten Sie das hässliche #ifdef) :

#include <stdio.h>
#include <stdint.h>
int main (int argc, char *argv[]) {

    // Only requires stdint.h to compile:
    uint64_t myvar = UINT64_C(0) - UINT64_C(1);

    // Not recommended.
    // Requires different cases for different operating systems,
    //  because 'PRIu64' macro is unavailable (only available 
    //  if inttypes.h is #include:d).
    #ifdef __linux__
        printf("myvar=%lu\n", myvar);
    #elif _WIN32
        printf("myvar=%llu\n", myvar);
    #endif
}

  • Danke, das war eine großartige Antwort (obwohl ich die ursprüngliche Frage nicht gestellt habe!). Um Mikkos Antwort zu ergänzen, kopiert inttypes.h in stdint.h (über den Präprozessor #include). Zumindest auf meinem Linux-System (GCC 4.5.2 und ähnlich).

    – pr1268

    29. August 2012 um 2:02 Uhr

Benutzeravatar von Ed Staub
Ed Staub

Siehe den Wikipedia-Artikel für inttypes.h.

Verwenden Sie stdint.h für einen minimalen Satz von Definitionen; Verwenden Sie inttypes.h, wenn Sie auch portable Unterstützung für diese in printf, scanf usw. benötigen.

  • Ich bin zu stackoverflow gekommen, um den Unterschied zwischen stdint.h und inttypes.h zu lernen nach Lesen Sie den Wiki-Artikel, der mir sagt, dass (u)intN_t in beiden verfügbar ist. Was ist also der Unterschied? Welche soll ich einschließen?

    – dave

    15. August 2012 um 6:04 Uhr

  • beinhaltet und fügt einige printf-Makros hinzu. Siehe die Antwort von Mikko Östlund unten.

    – Eduard Falk

    10. Juni 2016 um 20:52 Uhr

  • Ich bekomme: fatal error: inttypes.h: No such file or directory

    – m4l490n

    15. April 2020 um 22:15 Uhr


  • @ m4l490n Verwenden Sie -std=c99?

    – Nayuki

    14. September 2021 um 2:05 Uhr

1420430cookie-checkUnterschied zwischen stdint.h und inttypes.h

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

Privacy policy