「C言語/標準ライブラリ/inttypes.h」の版間の差分
タグ: 2017年版ソースエディター |
→具体的な値の例: 表組み タグ: 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(" |
puts("{| class='wikitable' style='text-align:center'"); |
||
puts("|+ <inttypes.h> で定義されているマクロの値(一例)"); |
|||
puts("PRId16\t= \"" PRId16 "\""); |
|||
puts(" |
puts("|-"); |
||
puts("! \ !! *8 !! *16 !! *32 !! *64 !! *LEAST8 !! *LEAST16 !! *LEAST32 !! *LEAST64 !! *FAST8 !! *FAST16 !! *FAST32 !! *FAST64 !! *MAX !! *PTR"); |
|||
puts("PRId64\t= \"" PRId64 "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! PRId*"); |
||
puts("| " PRId8 " || " PRId16 " || " PRId32 " || " PRId64 " || " PRIdLEAST8 " || " PRIdLEAST16 " || " PRIdLEAST32 " || " PRIdLEAST64 " || " PRIdFAST8 " || " PRIdFAST16 " || " PRIdFAST32 " || " PRIdFAST64 " || " PRIdMAX " || " PRIdPTR ""); |
|||
puts("PRIdLEAST32\t= \"" PRIdLEAST32 "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! PRIi*"); |
||
puts("| " PRIi8 " || " PRIi16 " || " PRIi32 " || " PRIi64 " || " PRIiLEAST8 " || " PRIiLEAST16 " || " PRIiLEAST32 " || " PRIiLEAST64 " || " PRIiFAST8 " || " PRIiFAST16 " || " PRIiFAST32 " || " PRIiFAST64 " || " PRIiMAX " || " PRIiPTR ""); |
|||
puts("PRIdFAST16\t= \"" PRIdFAST16 "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! PRIo*"); |
||
puts("| " PRIo8 " || " PRIo16 " || " PRIo32 " || " PRIo64 " || " PRIoLEAST8 " || " PRIoLEAST16 " || " PRIoLEAST32 " || " PRIoLEAST64 " || " PRIoFAST8 " || " PRIoFAST16 " || " PRIoFAST32 " || " PRIoFAST64 " || " PRIoMAX " || " PRIoPTR ""); |
|||
puts("PRIdMAX\t= \"" PRIdMAX "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! PRIu*"); |
||
puts("| " PRIu8 " || " PRIu16 " || " PRIu32 " || " PRIu64 " || " PRIuLEAST8 " || " PRIuLEAST16 " || " PRIuLEAST32 " || " PRIuLEAST64 " || " PRIuFAST8 " || " PRIuFAST16 " || " PRIuFAST32 " || " PRIuFAST64 " || " PRIuMAX " || " PRIuPTR ""); |
|||
puts("PRIi16\t= \"" PRIi16 "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! PRIx*"); |
||
puts("| " PRIx8 " || " PRIx16 " || " PRIx32 " || " PRIx64 " || " PRIxLEAST8 " || " PRIxLEAST16 " || " PRIxLEAST32 " || " PRIxLEAST64 " || " PRIxFAST8 " || " PRIxFAST16 " || " PRIxFAST32 " || " PRIxFAST64 " || " PRIxMAX " || " PRIxPTR ""); |
|||
puts("PRIiLEAST8\t= \"" PRIiLEAST8 "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! PRIX*"); |
||
puts("| " PRIX8 " || " PRIX16 " || " PRIX32 " || " PRIX64 " || " PRIXLEAST8 " || " PRIXLEAST16 " || " PRIXLEAST32 " || " PRIXLEAST64 " || " PRIXFAST8 " || " PRIXFAST16 " || " PRIXFAST32 " || " PRIXFAST64 " || " PRIXMAX " || " PRIXPTR ""); |
|||
puts("PRIiLEAST64\t= \"" PRIiLEAST64 "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! SCNd*"); |
||
puts("| " SCNd8 " || " SCNd16 " || " SCNd32 " || " SCNd64 " || " SCNdLEAST8 " || " SCNdLEAST16 " || " SCNdLEAST32 " || " SCNdLEAST64 " || " SCNdFAST8 " || " SCNdFAST16 " || " SCNdFAST32 " || " SCNdFAST64 " || " SCNdMAX " || " SCNdPTR ""); |
|||
puts("PRIiFAST32\t= \"" PRIiFAST32 "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! SCNi*"); |
||
puts("| " SCNi8 " || " SCNi16 " || " SCNi32 " || " SCNi64 " || " SCNiLEAST8 " || " SCNiLEAST16 " || " SCNiLEAST32 " || " SCNiLEAST64 " || " SCNiFAST8 " || " SCNiFAST16 " || " SCNiFAST32 " || " SCNiFAST64 " || " SCNiMAX " || " SCNiPTR ""); |
|||
puts("PRIiPTR\t= \"" PRIiPTR "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! SCNo*"); |
||
puts("| " SCNo8 " || " SCNo16 " || " SCNo32 " || " SCNo64 " || " SCNoLEAST8 " || " SCNoLEAST16 " || " SCNoLEAST32 " || " SCNoLEAST64 " || " SCNoFAST8 " || " SCNoFAST16 " || " SCNoFAST32 " || " SCNoFAST64 " || " SCNoMAX " || " SCNoPTR ""); |
|||
puts("PRIo32\t= \"" PRIo32 "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! SCNu*"); |
||
puts("| " SCNu8 " || " SCNu16 " || " SCNu32 " || " SCNu64 " || " SCNuLEAST8 " || " SCNuLEAST16 " || " SCNuLEAST32 " || " SCNuLEAST64 " || " SCNuFAST8 " || " SCNuFAST16 " || " SCNuFAST32 " || " SCNuFAST64 " || " SCNuMAX " || " SCNuPTR ""); |
|||
puts("PRIoLEAST16\t= \"" PRIoLEAST16 "\""); |
|||
puts(" |
puts("|-"); |
||
puts(" |
puts("! SCNx*"); |
||
puts("| " SCNx8 " || " SCNx16 " || " SCNx32 " || " SCNx64 " || " SCNxLEAST8 " || " SCNxLEAST16 " || " SCNxLEAST32 " || " SCNxLEAST64 " || " SCNxFAST8 " || " SCNxFAST16 " || " SCNxFAST32 " || " SCNxFAST64 " || " SCNxMAX " || " SCNxPTR ""); |
|||
puts("PRIoFAST8\t= \"" PRIoFAST8 "\""); |
|||
puts( |
puts(""); |
||
puts(" |
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= |
;実行結果: <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);
具体的な値の例
\ | *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]。
脚註
- ^ C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. 217, §7.8 Format conversion of integer types .
- ^ C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. 217, §7.8.1 Macros for format specifiers .
- ^ 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 .
- ^ C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. xv, § Foreword ¶ Major changes in the second edition included: .
参考文献
- 国際標準化機構/国際電気標準会議 ISO/IEC 9899:2018(en) Information technology — Programming languages — C(2018-07-05)