web-dev-qa-db-fra.com

différence entre stdint.h et inttypes.h

Quelle est la différence entre stdint.h et inttypes.h?

Si aucun d'eux n'est utilisé, uint64_t n'est pas reconnu mais avec l'un d'eux, c'est un type défini.

68
mahmood

Voir l'article wikipedia pour inttypes.h.

Utilisez stdint.h pour un ensemble minimal de définitions; utilisez inttypes.h si vous avez également besoin d'un support portable pour ceux-ci dans printf, scanf, et al.

20
Ed Staub

stdint.h

L'inclusion de ce fichier est la "condition minimale" si vous souhaitez travailler avec les types entiers de largeur spécifiée de C99 (c'est-à-dire "int32_t", "uint16_t" etc.). Si vous incluez ce fichier, vous obtiendrez les définitions de ces types, afin que vous puissiez utiliser ces types dans les déclarations de variables et de fonctions et effectuer des opérations avec ces types de données.

inttypes.h

Si vous incluez ce fichier, vous obtiendrez tout ce que stdint.h fournit (car inttypes.h inclut stdint.h), mais vous obtiendrez également des facilités pour faire printf et scanf = (et "fprintf," fscanf ", etc.) avec ces types de manière portable. Par exemple, vous obtiendrez la macro" PRIu16 "afin de pouvoir imprimer un entier uint16_t comme ceci:

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

    // Only requires stdint.h to compile:
    uint16_t myvar = 65535;

    // Requires inttypes.h to compile:
    printf("myvar=%" PRIu16 "\n", myvar);  
}
138
Mikko Östlund