#include <stdio.h>
#include <inttypes.h>
int main(void)
{
int8_t int8;
int16_t int16;
int32_t int32;
int64_t int64;
uint8_t uint8;
uint16_t uint16;
uint32_t uint32;
uint64_t uint64;
scanf("%"SCNd8"%"SCNd16"%"SCNd32"%"SCNd64"%"SCNu8"%"SCNu16"%"SCNu32"%"SCNu64,
&int8, &int16, &int32, &int64, &uint8, &uint16, &uint32, &uint64);
printf("%"PRId8"\n%"PRId16"\n%"PRId32"\n%"PRId64"\n%"PRIu8"\n%"PRIu16"\n%"PRIu32"\n%"PRIu64"\n",
int8, int16, int32, int64, uint8, uint16, uint32, uint64);
return 0;
}
Je ne peux pas compiler ce code en utilisant la dernière version de gcc + MinGW + Netbeans + Windows. Netbeans dit "incapable de résoudre l'identifiant SCNd8 et SCNu8". Je ne trouve aucune référence pour SCNd8 et SCNu8 sur la page de manuel gcc bien que http://linux.die.net/include/inttypes.h les définit. Je ne reçois pas d'erreur de syntaxe pour l'utilisation de PRId8 ou PRIu8.Est-ce que gcc (windows + MinGW) définit SCNd8, SCNu8 dans inttypes.h?
MinGW inttypes.h (manque SCNd8 et SCNu8) (code exemple)
#define PRIXFAST64 "I64X"
#define PRIXMAX "I64X"
#define PRIXPTR "X"
/*
* fscanf macros for signed int types
* NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t
* (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have
* no length identifiers
*/
#define SCNd16 "hd"
#define SCNd32 "d"
#define SCNd64 "I64d"
#define SCNdLEAST16 "hd"
#define SCNdLEAST32 "d"
#define SCNdLEAST64 "I64d"
#define SCNdFAST16 "hd"
oui, vous avez raison – gameboy
@bossgameboy: Quelle version de gcc/mingw utilisez-vous? les formats "hhd" et "hhu" ne fonctionnent pas pour moi avec 4.5.1 (même s'ils sont déjà dans 'inttypes.h'). –
@Michael: le préfixe "hh" fait partie de C99 (pas C90). Vérifiez la page de manuel pour votre version de scanf (ou fscanf) pour vous assurer qu'elle est compatible avec "hh" pour 'char'. (C90 a juste "h" pour "court"). – tomlogic