On Thu, 22 Nov 2018, Andreas Kusalananda Kähäri wrote:
> >Description:
> When using scanf() to read a value into a uint_fast8_t or uint_fast16_t
> variable (or the signed equivalent), there is a mismatch between the
> type of the variable and the format specification that the corresponding
> SCN{u,d}FAST{8,16} macro expands to.
>
> This seems to affect the {u,}int_fast{8,16}_t types and not the "least"
> variant or ordinary {u,}int{8,16}_t types.
>
> This gives rise to warnings from clang, and also affects the values that
> are stored in the variables (see below).
Your code looks correct to me; <inttypes.h> seems incorrect.
oks for the diff below?
Philip Guenther
Index: inttypes.h
===================================================================
RCS file: /data/src/openbsd/src/include/inttypes.h,v
retrieving revision 1.11
diff -u -p -r1.11 inttypes.h
--- inttypes.h 11 Jun 2013 15:59:16 -0000 1.11
+++ inttypes.h 22 Nov 2018 17:53:05 -0000
@@ -162,8 +162,8 @@
#define SCNdLEAST32 "d" /* int_least32_t */
#define SCNdLEAST64 "lld" /* int_least64_t */
-#define SCNdFAST8 "hhd" /* int_fast8_t */
-#define SCNdFAST16 "hd" /* int_fast16_t */
+#define SCNdFAST8 "d" /* int_fast8_t */
+#define SCNdFAST16 "d" /* int_fast16_t */
#define SCNdFAST32 "d" /* int_fast32_t */
#define SCNdFAST64 "lld" /* int_fast64_t */
@@ -180,8 +180,8 @@
#define SCNiLEAST32 "i" /* int_least32_t */
#define SCNiLEAST64 "lli" /* int_least64_t */
-#define SCNiFAST8 "hhi" /* int_fast8_t */
-#define SCNiFAST16 "hi" /* int_fast16_t */
+#define SCNiFAST8 "i" /* int_fast8_t */
+#define SCNiFAST16 "i" /* int_fast16_t */
#define SCNiFAST32 "i" /* int_fast32_t */
#define SCNiFAST64 "lli" /* int_fast64_t */
@@ -199,8 +199,8 @@
#define SCNoLEAST32 "o" /* uint_least32_t */
#define SCNoLEAST64 "llo" /* uint_least64_t */
-#define SCNoFAST8 "hho" /* uint_fast8_t */
-#define SCNoFAST16 "ho" /* uint_fast16_t */
+#define SCNoFAST8 "o" /* uint_fast8_t */
+#define SCNoFAST16 "o" /* uint_fast16_t */
#define SCNoFAST32 "o" /* uint_fast32_t */
#define SCNoFAST64 "llo" /* uint_fast64_t */
@@ -217,8 +217,8 @@
#define SCNuLEAST32 "u" /* uint_least32_t */
#define SCNuLEAST64 "llu" /* uint_least64_t */
-#define SCNuFAST8 "hhu" /* uint_fast8_t */
-#define SCNuFAST16 "hu" /* uint_fast16_t */
+#define SCNuFAST8 "u" /* uint_fast8_t */
+#define SCNuFAST16 "u" /* uint_fast16_t */
#define SCNuFAST32 "u" /* uint_fast32_t */
#define SCNuFAST64 "llu" /* uint_fast64_t */
@@ -235,8 +235,8 @@
#define SCNxLEAST32 "x" /* uint_least32_t */
#define SCNxLEAST64 "llx" /* uint_least64_t */
-#define SCNxFAST8 "hhx" /* uint_fast8_t */
-#define SCNxFAST16 "hx" /* uint_fast16_t */
+#define SCNxFAST8 "x" /* uint_fast8_t */
+#define SCNxFAST16 "x" /* uint_fast16_t */
#define SCNxFAST32 "x" /* uint_fast32_t */
#define SCNxFAST64 "llx" /* uint_fast64_t */