#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;
}
我無法使用最新的gcc + MinGW + Netbeans + Windows編譯此代碼。 Netbeans說「無法解析標識符SCNd8和SCNu8」。雖然http://linux.die.net/include/inttypes.h定義了它們,但我無法在gcc手冊頁上找到SCNd8和SCNu8的任何參考。我沒有收到使用PRId8或PRIu8的語法錯誤。gcc(windows + MinGW)在inttypes.h中定義了SCNd8,SCNu8嗎?
MinGW的inttypes.h(缺乏SCNd8和SCNu8)(示例代碼)
#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"
是的,你是對的 – gameboy 2010-11-04 23:30:01
@bossgameboy:你使用的是什麼版本的gcc/mingw?在4.5.1中,「hhd」和「hhu」格式不適用於我(即使它們已經在'inttypes.h'中)。 – 2010-11-04 23:53:56
@Michael:「hh」前綴是C99(不是C90)的一部分。檢查您的scanf(或fscanf)版本的手冊頁以確保它與「char」的「hh」兼容。 (C90對於「short」只有「h」)。 – tomlogic 2010-11-10 16:20:15