「C言語/標準ライブラリ/inttypes.h」の版間の差分

出典: フリー教科書『ウィキブックス(Wikibooks)』
削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
78 行 78 行


== 具体的な値の例 ==
== 具体的な値の例 ==
{| class='wikitable' style='text-align:center'
;[https://paiza.io/projects/zyxtgx-TuJ092oihUfQc3Q?language=c 実際値を表示するプログラム]: <syntaxhighlight lang=c line>
|+ <inttypes.h> で定義されているマクロの値(一例)
|-
! \ !! *8 !! *16 !! *32 !! *64 !! *LEAST8 !! *LEAST16 !! *LEAST32 !! *LEAST64 !! *FAST8 !! *FAST16 !! *FAST32 !! *FAST64 !! *MAX !! *PTR
|-
! PRId*
| d || d || d || ld || d || d || d || ld || d || ld || ld || ld || ld || ld
|-
! PRIi*
| i || i || i || li || i || i || i || li || i || li || li || li || li || li
|-
! PRIo*
| o || o || o || lo || o || o || o || lo || o || lo || lo || lo || lo || lo
|-
! PRIu*
| u || u || u || lu || u || u || u || lu || u || lu || lu || lu || lu || lu
|-
! PRIx*
| x || x || x || lx || x || x || x || lx || x || lx || lx || lx || lx || lx
|-
! PRIX*
| X || X || X || lX || X || X || X || lX || X || lX || lX || lX || lX || lX
|-
! SCNd*
| hhd || hd || d || ld || hhd || hd || d || ld || hhd || ld || ld || ld || ld || ld
|-
! SCNi*
| hhi || hi || i || li || hhi || hi || i || li || hhi || li || li || li || li || li
|-
! SCNo*
| hho || ho || o || lo || hho || ho || o || lo || hho || lo || lo || lo || lo || lo
|-
! SCNu*
| hhu || hu || u || lu || hhu || hu || u || lu || hhu || lu || lu || lu || lu || lu
|-
! SCNx*
| hhx || hx || x || lx || hhx || hx || x || lx || hhx || lx || lx || lx || lx || lx

|}

;[https://paiza.io/projects/_o3x1t3sxSWATer0QsDecA?language=c 実際値を表示するプログラム]: <syntaxhighlight lang=c line>
#include <stdio.h>
#include <stdio.h>
#include <inttypes.h>
#include <inttypes.h>


int main(void) {
int main(void) {
puts("PRId8\t= \"" PRId8 "\"");
puts("{| class='wikitable' style='text-align:center'");
puts("|+ <inttypes.h> で定義されているマクロの値(一例)");
puts("PRId16\t= \"" PRId16 "\"");
puts("PRId32\t= \"" PRId32 "\"");
puts("|-");
puts("! \ !! *8 !! *16 !! *32 !! *64 !! *LEAST8 !! *LEAST16 !! *LEAST32 !! *LEAST64 !! *FAST8 !! *FAST16 !! *FAST32 !! *FAST64 !! *MAX !! *PTR");
puts("PRId64\t= \"" PRId64 "\"");
puts("PRIdLEAST8\t= \"" PRIdLEAST8 "\"");
puts("|-");
puts("PRIdLEAST16\t= \"" PRIdLEAST16 "\"");
puts("! PRId*");
puts("| " PRId8 " || " PRId16 " || " PRId32 " || " PRId64 " || " PRIdLEAST8 " || " PRIdLEAST16 " || " PRIdLEAST32 " || " PRIdLEAST64 " || " PRIdFAST8 " || " PRIdFAST16 " || " PRIdFAST32 " || " PRIdFAST64 " || " PRIdMAX " || " PRIdPTR "");
puts("PRIdLEAST32\t= \"" PRIdLEAST32 "\"");
puts("PRIdLEAST64\t= \"" PRIdLEAST64 "\"");
puts("|-");
puts("PRIdFAST8\t= \"" PRIdFAST8 "\"");
puts("! PRIi*");
puts("| " PRIi8 " || " PRIi16 " || " PRIi32 " || " PRIi64 " || " PRIiLEAST8 " || " PRIiLEAST16 " || " PRIiLEAST32 " || " PRIiLEAST64 " || " PRIiFAST8 " || " PRIiFAST16 " || " PRIiFAST32 " || " PRIiFAST64 " || " PRIiMAX " || " PRIiPTR "");
puts("PRIdFAST16\t= \"" PRIdFAST16 "\"");
puts("PRIdFAST32\t= \"" PRIdFAST32 "\"");
puts("|-");
puts("PRIdFAST64\t= \"" PRIdFAST64 "\"");
puts("! PRIo*");
puts("| " PRIo8 " || " PRIo16 " || " PRIo32 " || " PRIo64 " || " PRIoLEAST8 " || " PRIoLEAST16 " || " PRIoLEAST32 " || " PRIoLEAST64 " || " PRIoFAST8 " || " PRIoFAST16 " || " PRIoFAST32 " || " PRIoFAST64 " || " PRIoMAX " || " PRIoPTR "");
puts("PRIdMAX\t= \"" PRIdMAX "\"");
puts("PRIdPTR\t= \"" PRIdPTR "\"");
puts("|-");
puts("PRIi8\t= \"" PRIi8 "\"");
puts("! PRIu*");
puts("| " PRIu8 " || " PRIu16 " || " PRIu32 " || " PRIu64 " || " PRIuLEAST8 " || " PRIuLEAST16 " || " PRIuLEAST32 " || " PRIuLEAST64 " || " PRIuFAST8 " || " PRIuFAST16 " || " PRIuFAST32 " || " PRIuFAST64 " || " PRIuMAX " || " PRIuPTR "");
puts("PRIi16\t= \"" PRIi16 "\"");
puts("PRIi32\t= \"" PRIi32 "\"");
puts("|-");
puts("PRIi64\t= \"" PRIi64 "\"");
puts("! PRIx*");
puts("| " PRIx8 " || " PRIx16 " || " PRIx32 " || " PRIx64 " || " PRIxLEAST8 " || " PRIxLEAST16 " || " PRIxLEAST32 " || " PRIxLEAST64 " || " PRIxFAST8 " || " PRIxFAST16 " || " PRIxFAST32 " || " PRIxFAST64 " || " PRIxMAX " || " PRIxPTR "");
puts("PRIiLEAST8\t= \"" PRIiLEAST8 "\"");
puts("PRIiLEAST16\t= \"" PRIiLEAST16 "\"");
puts("|-");
puts("PRIiLEAST32\t= \"" PRIiLEAST32 "\"");
puts("! PRIX*");
puts("| " PRIX8 " || " PRIX16 " || " PRIX32 " || " PRIX64 " || " PRIXLEAST8 " || " PRIXLEAST16 " || " PRIXLEAST32 " || " PRIXLEAST64 " || " PRIXFAST8 " || " PRIXFAST16 " || " PRIXFAST32 " || " PRIXFAST64 " || " PRIXMAX " || " PRIXPTR "");
puts("PRIiLEAST64\t= \"" PRIiLEAST64 "\"");
puts("PRIiFAST8\t= \"" PRIiFAST8 "\"");
puts("|-");
puts("PRIiFAST16\t= \"" PRIiFAST16 "\"");
puts("! SCNd*");
puts("| " SCNd8 " || " SCNd16 " || " SCNd32 " || " SCNd64 " || " SCNdLEAST8 " || " SCNdLEAST16 " || " SCNdLEAST32 " || " SCNdLEAST64 " || " SCNdFAST8 " || " SCNdFAST16 " || " SCNdFAST32 " || " SCNdFAST64 " || " SCNdMAX " || " SCNdPTR "");
puts("PRIiFAST32\t= \"" PRIiFAST32 "\"");
puts("PRIiFAST64\t= \"" PRIiFAST64 "\"");
puts("|-");
puts("PRIiMAX\t= \"" PRIiMAX "\"");
puts("! SCNi*");
puts("| " SCNi8 " || " SCNi16 " || " SCNi32 " || " SCNi64 " || " SCNiLEAST8 " || " SCNiLEAST16 " || " SCNiLEAST32 " || " SCNiLEAST64 " || " SCNiFAST8 " || " SCNiFAST16 " || " SCNiFAST32 " || " SCNiFAST64 " || " SCNiMAX " || " SCNiPTR "");
puts("PRIiPTR\t= \"" PRIiPTR "\"");
puts("PRIo8\t= \"" PRIo8 "\"");
puts("|-");
puts("PRIo16\t= \"" PRIo16 "\"");
puts("! SCNo*");
puts("| " SCNo8 " || " SCNo16 " || " SCNo32 " || " SCNo64 " || " SCNoLEAST8 " || " SCNoLEAST16 " || " SCNoLEAST32 " || " SCNoLEAST64 " || " SCNoFAST8 " || " SCNoFAST16 " || " SCNoFAST32 " || " SCNoFAST64 " || " SCNoMAX " || " SCNoPTR "");
puts("PRIo32\t= \"" PRIo32 "\"");
puts("PRIo64\t= \"" PRIo64 "\"");
puts("|-");
puts("PRIoLEAST8\t= \"" PRIoLEAST8 "\"");
puts("! SCNu*");
puts("| " SCNu8 " || " SCNu16 " || " SCNu32 " || " SCNu64 " || " SCNuLEAST8 " || " SCNuLEAST16 " || " SCNuLEAST32 " || " SCNuLEAST64 " || " SCNuFAST8 " || " SCNuFAST16 " || " SCNuFAST32 " || " SCNuFAST64 " || " SCNuMAX " || " SCNuPTR "");
puts("PRIoLEAST16\t= \"" PRIoLEAST16 "\"");
puts("PRIoLEAST32\t= \"" PRIoLEAST32 "\"");
puts("|-");
puts("PRIoLEAST64\t= \"" PRIoLEAST64 "\"");
puts("! SCNx*");
puts("| " SCNx8 " || " SCNx16 " || " SCNx32 " || " SCNx64 " || " SCNxLEAST8 " || " SCNxLEAST16 " || " SCNxLEAST32 " || " SCNxLEAST64 " || " SCNxFAST8 " || " SCNxFAST16 " || " SCNxFAST32 " || " SCNxFAST64 " || " SCNxMAX " || " SCNxPTR "");
puts("PRIoFAST8\t= \"" PRIoFAST8 "\"");
puts("PRIoFAST16\t= \"" PRIoFAST16 "\"");
puts("");
puts("PRIoFAST32\t= \"" PRIoFAST32 "\"");
puts("|}");
puts("PRIoFAST64\t= \"" PRIoFAST64 "\"");
puts("PRIoMAX\t= \"" PRIoMAX "\"");
puts("PRIoPTR\t= \"" PRIoPTR "\"");
puts("PRIu8\t= \"" PRIu8 "\"");
puts("PRIu16\t= \"" PRIu16 "\"");
puts("PRIu32\t= \"" PRIu32 "\"");
puts("PRIu64\t= \"" PRIu64 "\"");
puts("PRIuLEAST8\t= \"" PRIuLEAST8 "\"");
puts("PRIuLEAST16\t= \"" PRIuLEAST16 "\"");
puts("PRIuLEAST32\t= \"" PRIuLEAST32 "\"");
puts("PRIuLEAST64\t= \"" PRIuLEAST64 "\"");
puts("PRIuFAST8\t= \"" PRIuFAST8 "\"");
puts("PRIuFAST16\t= \"" PRIuFAST16 "\"");
puts("PRIuFAST32\t= \"" PRIuFAST32 "\"");
puts("PRIuFAST64\t= \"" PRIuFAST64 "\"");
puts("PRIuMAX\t= \"" PRIuMAX "\"");
puts("PRIuPTR\t= \"" PRIuPTR "\"");
puts("PRIx8\t= \"" PRIx8 "\"");
puts("PRIx16\t= \"" PRIx16 "\"");
puts("PRIx32\t= \"" PRIx32 "\"");
puts("PRIx64\t= \"" PRIx64 "\"");
puts("PRIxLEAST8\t= \"" PRIxLEAST8 "\"");
puts("PRIxLEAST16\t= \"" PRIxLEAST16 "\"");
puts("PRIxLEAST32\t= \"" PRIxLEAST32 "\"");
puts("PRIxLEAST64\t= \"" PRIxLEAST64 "\"");
puts("PRIxFAST8\t= \"" PRIxFAST8 "\"");
puts("PRIxFAST16\t= \"" PRIxFAST16 "\"");
puts("PRIxFAST32\t= \"" PRIxFAST32 "\"");
puts("PRIxFAST64\t= \"" PRIxFAST64 "\"");
puts("PRIxMAX\t= \"" PRIxMAX "\"");
puts("PRIxPTR\t= \"" PRIxPTR "\"");
puts("PRIX8\t= \"" PRIX8 "\"");
puts("PRIX16\t= \"" PRIX16 "\"");
puts("PRIX32\t= \"" PRIX32 "\"");
puts("PRIX64\t= \"" PRIX64 "\"");
puts("PRIXLEAST8\t= \"" PRIXLEAST8 "\"");
puts("PRIXLEAST16\t= \"" PRIXLEAST16 "\"");
puts("PRIXLEAST32\t= \"" PRIXLEAST32 "\"");
puts("PRIXLEAST64\t= \"" PRIXLEAST64 "\"");
puts("PRIXFAST8\t= \"" PRIXFAST8 "\"");
puts("PRIXFAST16\t= \"" PRIXFAST16 "\"");
puts("PRIXFAST32\t= \"" PRIXFAST32 "\"");
puts("PRIXFAST64\t= \"" PRIXFAST64 "\"");
puts("PRIXMAX\t= \"" PRIXMAX "\"");
puts("PRIXPTR\t= \"" PRIXPTR "\"");
puts("SCNd8\t= \"" SCNd8 "\"");
puts("SCNd16\t= \"" SCNd16 "\"");
puts("SCNd32\t= \"" SCNd32 "\"");
puts("SCNd64\t= \"" SCNd64 "\"");
puts("SCNdLEAST8\t= \"" SCNdLEAST8 "\"");
puts("SCNdLEAST16\t= \"" SCNdLEAST16 "\"");
puts("SCNdLEAST32\t= \"" SCNdLEAST32 "\"");
puts("SCNdLEAST64\t= \"" SCNdLEAST64 "\"");
puts("SCNdFAST8\t= \"" SCNdFAST8 "\"");
puts("SCNdFAST16\t= \"" SCNdFAST16 "\"");
puts("SCNdFAST32\t= \"" SCNdFAST32 "\"");
puts("SCNdFAST64\t= \"" SCNdFAST64 "\"");
puts("SCNdMAX\t= \"" SCNdMAX "\"");
puts("SCNdPTR\t= \"" SCNdPTR "\"");
puts("SCNi8\t= \"" SCNi8 "\"");
puts("SCNi16\t= \"" SCNi16 "\"");
puts("SCNi32\t= \"" SCNi32 "\"");
puts("SCNi64\t= \"" SCNi64 "\"");
puts("SCNiLEAST8\t= \"" SCNiLEAST8 "\"");
puts("SCNiLEAST16\t= \"" SCNiLEAST16 "\"");
puts("SCNiLEAST32\t= \"" SCNiLEAST32 "\"");
puts("SCNiLEAST64\t= \"" SCNiLEAST64 "\"");
puts("SCNiFAST8\t= \"" SCNiFAST8 "\"");
puts("SCNiFAST16\t= \"" SCNiFAST16 "\"");
puts("SCNiFAST32\t= \"" SCNiFAST32 "\"");
puts("SCNiFAST64\t= \"" SCNiFAST64 "\"");
puts("SCNiMAX\t= \"" SCNiMAX "\"");
puts("SCNiPTR\t= \"" SCNiPTR "\"");
puts("SCNo8\t= \"" SCNo8 "\"");
puts("SCNo16\t= \"" SCNo16 "\"");
puts("SCNo32\t= \"" SCNo32 "\"");
puts("SCNo64\t= \"" SCNo64 "\"");
puts("SCNoLEAST8\t= \"" SCNoLEAST8 "\"");
puts("SCNoLEAST16\t= \"" SCNoLEAST16 "\"");
puts("SCNoLEAST32\t= \"" SCNoLEAST32 "\"");
puts("SCNoLEAST64\t= \"" SCNoLEAST64 "\"");
puts("SCNoFAST8\t= \"" SCNoFAST8 "\"");
puts("SCNoFAST16\t= \"" SCNoFAST16 "\"");
puts("SCNoFAST32\t= \"" SCNoFAST32 "\"");
puts("SCNoFAST64\t= \"" SCNoFAST64 "\"");
puts("SCNoMAX\t= \"" SCNoMAX "\"");
puts("SCNoPTR\t= \"" SCNoPTR "\"");
puts("SCNu8\t= \"" SCNu8 "\"");
puts("SCNu16\t= \"" SCNu16 "\"");
puts("SCNu32\t= \"" SCNu32 "\"");
puts("SCNu64\t= \"" SCNu64 "\"");
puts("SCNuLEAST8\t= \"" SCNuLEAST8 "\"");
puts("SCNuLEAST16\t= \"" SCNuLEAST16 "\"");
puts("SCNuLEAST32\t= \"" SCNuLEAST32 "\"");
puts("SCNuLEAST64\t= \"" SCNuLEAST64 "\"");
puts("SCNuFAST8\t= \"" SCNuFAST8 "\"");
puts("SCNuFAST16\t= \"" SCNuFAST16 "\"");
puts("SCNuFAST32\t= \"" SCNuFAST32 "\"");
puts("SCNuFAST64\t= \"" SCNuFAST64 "\"");
puts("SCNuMAX\t= \"" SCNuMAX "\"");
puts("SCNuPTR\t= \"" SCNuPTR "\"");
puts("SCNx8\t= \"" SCNx8 "\"");
puts("SCNx16\t= \"" SCNx16 "\"");
puts("SCNx32\t= \"" SCNx32 "\"");
puts("SCNx64\t= \"" SCNx64 "\"");
puts("SCNxLEAST8\t= \"" SCNxLEAST8 "\"");
puts("SCNxLEAST16\t= \"" SCNxLEAST16 "\"");
puts("SCNxLEAST32\t= \"" SCNxLEAST32 "\"");
puts("SCNxLEAST64\t= \"" SCNxLEAST64 "\"");
puts("SCNxFAST8\t= \"" SCNxFAST8 "\"");
puts("SCNxFAST16\t= \"" SCNxFAST16 "\"");
puts("SCNxFAST32\t= \"" SCNxFAST32 "\"");
puts("SCNxFAST64\t= \"" SCNxFAST64 "\"");
puts("SCNxMAX\t= \"" SCNxMAX "\"");
puts("SCNxPTR\t= \"" SCNxPTR "\"");
}
}
</syntaxhighlight>
</syntaxhighlight>
;実行結果: <syntaxhighlight lang=c line>
;実行結果: <syntaxhighlight lang=text line>
{| class='wikitable' style='text-align:center'
PRId8 = "d"
|+ <inttypes.h> で定義されているマクロの値(一例)
PRId16 = "d"
|-
PRId32 = "d"
! \ !! *8 !! *16 !! *32 !! *64 !! *LEAST8 !! *LEAST16 !! *LEAST32 !! *LEAST64 !! *FAST8 !! *FAST16 !! *FAST32 !! *FAST64 !! *MAX !! *PTR
PRId64 = "ld"
|-
PRIdLEAST8 = "d"
! PRId*
PRIdLEAST16 = "d"
| d || d || d || ld || d || d || d || ld || d || ld || ld || ld || ld || ld
PRIdLEAST32 = "d"
|-
PRIdLEAST64 = "ld"
! PRIi*
PRIdFAST8 = "d"
| i || i || i || li || i || i || i || li || i || li || li || li || li || li
PRIdFAST16 = "ld"
|-
PRIdFAST32 = "ld"
! PRIo*
PRIdFAST64 = "ld"
| o || o || o || lo || o || o || o || lo || o || lo || lo || lo || lo || lo
PRIdMAX = "ld"
|-
PRIdPTR = "ld"
! PRIu*
PRIi8 = "i"
| u || u || u || lu || u || u || u || lu || u || lu || lu || lu || lu || lu
PRIi16 = "i"
|-
PRIi32 = "i"
! PRIx*
PRIi64 = "li"
| x || x || x || lx || x || x || x || lx || x || lx || lx || lx || lx || lx
PRIiLEAST8 = "i"
|-
PRIiLEAST16 = "i"
! PRIX*
PRIiLEAST32 = "i"
| X || X || X || lX || X || X || X || lX || X || lX || lX || lX || lX || lX
PRIiLEAST64 = "li"
|-
PRIiFAST8 = "i"
! SCNd*
PRIiFAST16 = "li"
| hhd || hd || d || ld || hhd || hd || d || ld || hhd || ld || ld || ld || ld || ld
PRIiFAST32 = "li"
|-
PRIiFAST64 = "li"
! SCNi*
PRIiMAX = "li"
| hhi || hi || i || li || hhi || hi || i || li || hhi || li || li || li || li || li
PRIiPTR = "li"
|-
PRIo8 = "o"
! SCNo*
PRIo16 = "o"
| hho || ho || o || lo || hho || ho || o || lo || hho || lo || lo || lo || lo || lo
PRIo32 = "o"
|-
PRIo64 = "lo"
! SCNu*
PRIoLEAST8 = "o"
| hhu || hu || u || lu || hhu || hu || u || lu || hhu || lu || lu || lu || lu || lu
PRIoLEAST16 = "o"
|-
PRIoLEAST32 = "o"
! SCNx*
PRIoLEAST64 = "lo"
| hhx || hx || x || lx || hhx || hx || x || lx || hhx || lx || lx || lx || lx || lx
PRIoFAST8 = "o"

PRIoFAST16 = "lo"
|}
PRIoFAST32 = "lo"
</syntaxhighlight>
PRIoFAST64 = "lo"
;参考: <syntaxhighlight lang=ruby line>
PRIoMAX = "lo"
COLS = %w(8 16 32 64 LEAST8 LEAST16 LEAST32 LEAST64 FAST8 FAST16 FAST32 FAST64 MAX PTR)
PRIoPTR = "lo"
ROWS = %w(PRId PRIi PRIo PRIu PRIx PRIX SCNd SCNi SCNo SCNu SCNx)
PRIu8 = "u"

PRIu16 = "u"
puts <<EOS
PRIu32 = "u"
#include <stdio.h>
PRIu64 = "lu"
#include <inttypes.h>
PRIuLEAST8 = "u"

PRIuLEAST16 = "u"
int main(void) {
PRIuLEAST32 = "u"
#{
PRIuLEAST64 = "lu"
(<<EOS1
PRIuFAST8 = "u"
{| class='wikitable' style='text-align:center'
PRIuFAST16 = "lu"
|+ <inttypes.h> で定義されているマクロの値(一例)
PRIuFAST32 = "lu"
|-
PRIuFAST64 = "lu"
! \ !! #{COLS.map{|col| "*#{col}" }.join(" !! ")}
PRIuMAX = "lu"
#{ ROWS.map{|row|
PRIuPTR = "lu"
<<EOS2
PRIx8 = "x"
|-
PRIx16 = "x"
! #{row}*
PRIx32 = "x"
| #{COLS.map{|col| %|" #{row}#{col} "| }.join(" || ")}
PRIx64 = "lx"
EOS2
PRIxLEAST8 = "x"
}.join()
PRIxLEAST16 = "x"
}
PRIxLEAST32 = "x"
|}
PRIxLEAST64 = "lx"
EOS1
PRIxFAST8 = "x"
).split(/\n/).map{|line| %| puts("#{line}");| }.join("\n")
PRIxFAST16 = "lx"
}
PRIxFAST32 = "lx"
}
PRIxFAST64 = "lx"
EOS
PRIxMAX = "lx"
PRIxPTR = "lx"
PRIX8 = "X"
PRIX16 = "X"
PRIX32 = "X"
PRIX64 = "lX"
PRIXLEAST8 = "X"
PRIXLEAST16 = "X"
PRIXLEAST32 = "X"
PRIXLEAST64 = "lX"
PRIXFAST8 = "X"
PRIXFAST16 = "lX"
PRIXFAST32 = "lX"
PRIXFAST64 = "lX"
PRIXMAX = "lX"
PRIXPTR = "lX"
SCNd8 = "hhd"
SCNd16 = "hd"
SCNd32 = "d"
SCNd64 = "ld"
SCNdLEAST8 = "hhd"
SCNdLEAST16 = "hd"
SCNdLEAST32 = "d"
SCNdLEAST64 = "ld"
SCNdFAST8 = "hhd"
SCNdFAST16 = "ld"
SCNdFAST32 = "ld"
SCNdFAST64 = "ld"
SCNdMAX = "ld"
SCNdPTR = "ld"
SCNi8 = "hhi"
SCNi16 = "hi"
SCNi32 = "i"
SCNi64 = "li"
SCNiLEAST8 = "hhi"
SCNiLEAST16 = "hi"
SCNiLEAST32 = "i"
SCNiLEAST64 = "li"
SCNiFAST8 = "hhi"
SCNiFAST16 = "li"
SCNiFAST32 = "li"
SCNiFAST64 = "li"
SCNiMAX = "li"
SCNiPTR = "li"
SCNo8 = "hho"
SCNo16 = "ho"
SCNo32 = "o"
SCNo64 = "lo"
SCNoLEAST8 = "hho"
SCNoLEAST16 = "ho"
SCNoLEAST32 = "o"
SCNoLEAST64 = "lo"
SCNoFAST8 = "hho"
SCNoFAST16 = "lo"
SCNoFAST32 = "lo"
SCNoFAST64 = "lo"
SCNoMAX = "lo"
SCNoPTR = "lo"
SCNu8 = "hhu"
SCNu16 = "hu"
SCNu32 = "u"
SCNu64 = "lu"
SCNuLEAST8 = "hhu"
SCNuLEAST16 = "hu"
SCNuLEAST32 = "u"
SCNuLEAST64 = "lu"
SCNuFAST8 = "hhu"
SCNuFAST16 = "lu"
SCNuFAST32 = "lu"
SCNuFAST64 = "lu"
SCNuMAX = "lu"
SCNuPTR = "lu"
SCNx8 = "hhx"
SCNx16 = "hx"
SCNx32 = "x"
SCNx64 = "lx"
SCNxLEAST8 = "hhx"
SCNxLEAST16 = "hx"
SCNxLEAST32 = "x"
SCNxLEAST64 = "lx"
SCNxFAST8 = "hhx"
SCNxFAST16 = "lx"
SCNxFAST32 = "lx"
SCNxFAST64 = "lx"
SCNxMAX = "lx"
SCNxPTR = "lx"
</syntaxhighlight>
</syntaxhighlight>



2021年8月29日 (日) 23:40時点における版

ヘッダー <inttypes.h> は、ヘッダー <stdint.h> をインクルードしホストされた実装によって提供される追加機能で <stdint.h> を拡張します[1]

<inttypes.h> では、最大幅の整数を操作する関数と数値文字列を最大幅の整数に変換する関数を宣言し、imaxdiv関数が返す値の型である構造体の型 imaxdiv_t を宣言しています。

<inttypes.h> では、宣言された各型には、フォーマットされた入出力関数で使用する変換指定子のための対応するマクロが定義されています。

フォーマット指定用マクロ

<inttypes.h> では、以下のフォーマット指定用マクロが定義されています[2]

以下のオブジェクトライクなマクロは、変換指定子を含む文字列リテラルに展開します。 変換指定子を含む文字列リテラルに展開され、長さ修飾子によって修正されることもあります。 これは、対応する整数型に変換する際に、フォーマットされた入出力関数の format 引数内で使用するのに適しています。

これらのマクロ名は、PRI (fprintf および fwprintf ファミリの文字列リテラル) または SCN (fscanf および fwscanf ファミリの文字列リテラル),220) の後に変換指定子が続き、その後に 7.20.1 の類似した型名に対応する名前が続くという一般的な形式をとる。これらの名前では、Nは§7.20.1 Integer types に記載されている型の幅を表す。例えば、PRIdFAST32 は、int_fast32_t型の整数の値を表示するためのフォーマット文字列として使用できる。

符号付き整数用のfprintfマクロ
PRIdN PRIdLEASTN PRIdFASTN PRIdMAX PRIdPTR
PRIiN PRIiLEASTN PRIiFASTN PRIiMAX PRIiPTR
符号なし整数用のfprintfマクロ
PRIoN PRIoLEASTN PRIoFASTN PRIoMAX PRIoPTR
PRIuN PRIuLEASTN PRIuFASTN PRIuMAX PRIuPTR
PRIxN PRIxLEASTN PRIxFASTN PRIxMAX PRIxPTR
PRIXN PRIXLEASTN PRIXFASTN PRIXMAX PRIXPTR
符号付き整数用のfscanfマクロ
SCNdN SCNdLEASTN SCNdFASTN SCNdMAX SCNdPTR
SCNiN SCNiLEASTN SCNiFASTN SCNiMAX SCNiPTR
符号なし整数用のfscanfマクロ
SCNoN SCNoLEASTN SCNoFASTN SCNoMAX SCNoPTR
SCNuN SCNuLEASTN SCNuFASTN SCNuMAX SCNuPTR
SCNxN SCNxLEASTN SCNxFASTN SCNxMAX SCNxPTR

(言語処理系は)実装が<stdint.h>で提供している各型について、対応するfprintfマクロを定義し、実装がその型に適したfscanf長さ修飾子を持たない限り、対応するfscanfマクロを定義しなければならない。

#include <stdio.h>
#include <inttypes.h>
int main(void)
{
  uintmax_t i = UINTMAX_MAX; // this type always exists
  wprintf(L"The largest integer value is %#022" PRIxMAX "\n", i);
  return 0;
}
実行結果
The largest integer value is 0x0000ffffffffffffffff

最大幅整数型のための関数

この節は書きかけです。この節を編集してくれる方を心からお待ちしています。

最大幅の整数を操作する関数[3]

intmax_t imaxabs(intmax_t j);
imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
intmax_t strtoimax(const char * restrict nptr, char ** restrict endptr, int base);
uintmax_t strtoumax(const char * restrict nptr, char ** restrict endptr, int base);
intmax_t wcstoimax(const wchar_t *restrict nptr, wchar_t **restrict endptr, int base);
uintmax_t wcstoumax(const wchar_t *restrict nptr, wchar_t **restrict endptr, int base);

具体的な値の例

<inttypes.h> で定義されているマクロの値(一例)
*8 *16 *32 *64 *LEAST8 *LEAST16 *LEAST32 *LEAST64 *FAST8 *FAST16 *FAST32 *FAST64 *MAX *PTR
PRId* d d d ld d d d ld d ld ld ld ld ld
PRIi* i i i li i i i li i li li li li li
PRIo* o o o lo o o o lo o lo lo lo lo lo
PRIu* u u u lu u u u lu u lu lu lu lu lu
PRIx* x x x lx x x x lx x lx lx lx lx lx
PRIX* X X X lX X X X lX X lX lX lX lX lX
SCNd* hhd hd d ld hhd hd d ld hhd ld ld ld ld ld
SCNi* hhi hi i li hhi hi i li hhi li li li li li
SCNo* hho ho o lo hho ho o lo hho lo lo lo lo lo
SCNu* hhu hu u lu hhu hu u lu hhu lu lu lu lu lu
SCNx* hhx hx x lx hhx hx x lx hhx lx lx lx lx lx
実際値を表示するプログラム
#include <stdio.h>
#include <inttypes.h>

int main(void) {
  puts("{| class='wikitable' style='text-align:center'");
  puts("|+ <inttypes.h> で定義されているマクロの値(一例)");
  puts("|-");
  puts("! \ !! *8 !! *16 !! *32 !! *64 !! *LEAST8 !! *LEAST16 !! *LEAST32 !! *LEAST64 !! *FAST8 !! *FAST16 !! *FAST32 !! *FAST64 !! *MAX !! *PTR");
  puts("|-");
  puts("! PRId*");
  puts("| " PRId8 " || " PRId16 " || " PRId32 " || " PRId64 " || " PRIdLEAST8 " || " PRIdLEAST16 " || " PRIdLEAST32 " || " PRIdLEAST64 " || " PRIdFAST8 " || " PRIdFAST16 " || " PRIdFAST32 " || " PRIdFAST64 " || " PRIdMAX " || " PRIdPTR "");
  puts("|-");
  puts("! PRIi*");
  puts("| " PRIi8 " || " PRIi16 " || " PRIi32 " || " PRIi64 " || " PRIiLEAST8 " || " PRIiLEAST16 " || " PRIiLEAST32 " || " PRIiLEAST64 " || " PRIiFAST8 " || " PRIiFAST16 " || " PRIiFAST32 " || " PRIiFAST64 " || " PRIiMAX " || " PRIiPTR "");
  puts("|-");
  puts("! PRIo*");
  puts("| " PRIo8 " || " PRIo16 " || " PRIo32 " || " PRIo64 " || " PRIoLEAST8 " || " PRIoLEAST16 " || " PRIoLEAST32 " || " PRIoLEAST64 " || " PRIoFAST8 " || " PRIoFAST16 " || " PRIoFAST32 " || " PRIoFAST64 " || " PRIoMAX " || " PRIoPTR "");
  puts("|-");
  puts("! PRIu*");
  puts("| " PRIu8 " || " PRIu16 " || " PRIu32 " || " PRIu64 " || " PRIuLEAST8 " || " PRIuLEAST16 " || " PRIuLEAST32 " || " PRIuLEAST64 " || " PRIuFAST8 " || " PRIuFAST16 " || " PRIuFAST32 " || " PRIuFAST64 " || " PRIuMAX " || " PRIuPTR "");
  puts("|-");
  puts("! PRIx*");
  puts("| " PRIx8 " || " PRIx16 " || " PRIx32 " || " PRIx64 " || " PRIxLEAST8 " || " PRIxLEAST16 " || " PRIxLEAST32 " || " PRIxLEAST64 " || " PRIxFAST8 " || " PRIxFAST16 " || " PRIxFAST32 " || " PRIxFAST64 " || " PRIxMAX " || " PRIxPTR "");
  puts("|-");
  puts("! PRIX*");
  puts("| " PRIX8 " || " PRIX16 " || " PRIX32 " || " PRIX64 " || " PRIXLEAST8 " || " PRIXLEAST16 " || " PRIXLEAST32 " || " PRIXLEAST64 " || " PRIXFAST8 " || " PRIXFAST16 " || " PRIXFAST32 " || " PRIXFAST64 " || " PRIXMAX " || " PRIXPTR "");
  puts("|-");
  puts("! SCNd*");
  puts("| " SCNd8 " || " SCNd16 " || " SCNd32 " || " SCNd64 " || " SCNdLEAST8 " || " SCNdLEAST16 " || " SCNdLEAST32 " || " SCNdLEAST64 " || " SCNdFAST8 " || " SCNdFAST16 " || " SCNdFAST32 " || " SCNdFAST64 " || " SCNdMAX " || " SCNdPTR "");
  puts("|-");
  puts("! SCNi*");
  puts("| " SCNi8 " || " SCNi16 " || " SCNi32 " || " SCNi64 " || " SCNiLEAST8 " || " SCNiLEAST16 " || " SCNiLEAST32 " || " SCNiLEAST64 " || " SCNiFAST8 " || " SCNiFAST16 " || " SCNiFAST32 " || " SCNiFAST64 " || " SCNiMAX " || " SCNiPTR "");
  puts("|-");
  puts("! SCNo*");
  puts("| " SCNo8 " || " SCNo16 " || " SCNo32 " || " SCNo64 " || " SCNoLEAST8 " || " SCNoLEAST16 " || " SCNoLEAST32 " || " SCNoLEAST64 " || " SCNoFAST8 " || " SCNoFAST16 " || " SCNoFAST32 " || " SCNoFAST64 " || " SCNoMAX " || " SCNoPTR "");
  puts("|-");
  puts("! SCNu*");
  puts("| " SCNu8 " || " SCNu16 " || " SCNu32 " || " SCNu64 " || " SCNuLEAST8 " || " SCNuLEAST16 " || " SCNuLEAST32 " || " SCNuLEAST64 " || " SCNuFAST8 " || " SCNuFAST16 " || " SCNuFAST32 " || " SCNuFAST64 " || " SCNuMAX " || " SCNuPTR "");
  puts("|-");
  puts("! SCNx*");
  puts("| " SCNx8 " || " SCNx16 " || " SCNx32 " || " SCNx64 " || " SCNxLEAST8 " || " SCNxLEAST16 " || " SCNxLEAST32 " || " SCNxLEAST64 " || " SCNxFAST8 " || " SCNxFAST16 " || " SCNxFAST32 " || " SCNxFAST64 " || " SCNxMAX " || " SCNxPTR "");
  puts("");
  puts("|}");
}
実行結果
{| class='wikitable' style='text-align:center'
|+ <inttypes.h> で定義されているマクロの値(一例)
|-
! \ !! *8 !! *16 !! *32 !! *64 !! *LEAST8 !! *LEAST16 !! *LEAST32 !! *LEAST64 !! *FAST8 !! *FAST16 !! *FAST32 !! *FAST64 !! *MAX !! *PTR
|-
! PRId*
| d || d || d || ld || d || d || d || ld || d || ld || ld || ld || ld || ld
|-
! PRIi*
| i || i || i || li || i || i || i || li || i || li || li || li || li || li
|-
! PRIo*
| o || o || o || lo || o || o || o || lo || o || lo || lo || lo || lo || lo
|-
! PRIu*
| u || u || u || lu || u || u || u || lu || u || lu || lu || lu || lu || lu
|-
! PRIx*
| x || x || x || lx || x || x || x || lx || x || lx || lx || lx || lx || lx
|-
! PRIX*
| X || X || X || lX || X || X || X || lX || X || lX || lX || lX || lX || lX
|-
! SCNd*
| hhd || hd || d || ld || hhd || hd || d || ld || hhd || ld || ld || ld || ld || ld
|-
! SCNi*
| hhi || hi || i || li || hhi || hi || i || li || hhi || li || li || li || li || li
|-
! SCNo*
| hho || ho || o || lo || hho || ho || o || lo || hho || lo || lo || lo || lo || lo
|-
! SCNu*
| hhu || hu || u || lu || hhu || hu || u || lu || hhu || lu || lu || lu || lu || lu
|-
! SCNx*
| hhx || hx || x || lx || hhx || hx || x || lx || hhx || lx || lx || lx || lx || lx

|}
参考
COLS = %w(8 16 32 64 LEAST8 LEAST16 LEAST32 LEAST64 FAST8 FAST16 FAST32 FAST64 MAX PTR)
ROWS = %w(PRId PRIi PRIo PRIu PRIx PRIX SCNd SCNi SCNo SCNu SCNx)

puts <<EOS
#include <stdio.h>
#include <inttypes.h>

int main(void) {
#{
(<<EOS1
{| class='wikitable' style='text-align:center'
|+ <inttypes.h> で定義されているマクロの値(一例)
|-
! \ !! #{COLS.map{|col| "*#{col}" }.join(" !! ")}
#{ ROWS.map{|row|
<<EOS2
|-
! #{row}*
| #{COLS.map{|col| %|" #{row}#{col} "| }.join(" || ")}
EOS2
}.join()
}
|}
EOS1
).split(/\n/).map{|line| %|  puts("#{line}");| }.join("\n")
}
}
EOS

歴史

<inttypes.h> は、ISO/IEC 9899:1999 (C99)で追加されました[4]

脚註

  1. ^ C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. 217, §7.8 Format conversion of integer types. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 
  2. ^ C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. 217, §7.8.1 Macros for format specifiers. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 
  3. ^ C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. 218, §7.8.2 Functions for greatest-width integer types. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 
  4. ^ C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. xv, § ForewordMajor changes in the second edition included:. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 

参考文献