web-dev-qa-db-ja.com

<inttypes.h>の良い紹介

32/64ビットビルドが混在するprintfを実行している人には、<inttypes.h>の使用をお勧めします。いくつかの例と使用ガイドラインを含む紹介ページまたはチュートリアルページをGoogleで検索しようとしましたが、見つかりませんでした。

誰かが<inttypes.h>の紹介やチュートリアルを勧めることはできますか?

27
Ben Jackson

まずは http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html をお試しください。

新しいポータブルフォーマットマクロの使用方法のより良い例は、 avr-libc にあります。説明のために(リンクからの)例を含めました。 QNXライブラリ 人間が読める形式の説明もあります(仕様を冷静に読むのが嫌いな場合)。ただし、説明の要点にたどり着くには、ページの最後近くまでスクロールする必要があります。 。

#include <inttypes.h>

uint8_t smallval;
int32_t longval;
...
printf("The hexadecimal value of smallval is %" PRIx8
       ", the decimal value of longval is %" PRId32 ".\n",
       smallval, longval);

これは「String」「String」暗黙の連結演算子を使用して文字列を生成することに注意してください(この例では)

"The hexadecimal value of smallval is %x, the decimal value of longval is %ld.\n"

命名規則を分解しようとすると、次のことが示されるようです。

  • (最初の3文字)
    • Printf形式のPRI
    • Scanf形式のSCN
  • (4番目の文字)
    • 16進フォーマットの場合はx
    • 符号なしフォーマットの場合はu
    • o8進形式の場合
    • 整数フォーマットの場合はi
    • 10進フォーマットの場合はd
  • (追加の文字)
    • 8ビットの場合は8
    • 16ビットの場合は16
    • 32ビットの場合は32
    • 64ビットの場合は64
    • 「高速」8ビット用のFAST8
    • 「高速」16ビット用のFAST16
    • 「高速」32ビット用のFAST32
    • 「高速」64ビット用のFAST64
    • 「最小」8ビットのLEAST8
    • 「最小」16ビットの場合はLEAST16
    • 「最小」の32ビットの場合はLEAST32
    • 「最小」64ビットの場合はLEAST64
    • ポインタのPTR
    • サポートされる最大ビットサイズのMAX

そう PRIx8は、16進数の8ビットにフォーマットするprintfフォーマット命令を意味します。

42
Edwin Buck

私はいつもそれらのことについて標準( PDFリンク )に行きます。設定されているパターンがわかれば、それほど複雑ではありません。関連するセクションは§7.8整数型のフォーマット変換<inttypes.h>

7
Carl Norum

HPには、ポータブルコードの記述に関する優れたリファレンスがあり、inttypes.hの使用に関する具体的なアドバイスを提供しています。

ポータブルコードの記述

2
ccozad

私はいつもウィキペディアから始めてヘッダーを調べます。 <inttypes.h> ウィキペディアでは非常に問題があるようです。次のステップは このサイト に行くことです。この前のサイトはすべてのマクロをリストし、例を示しています。 このサイト をチェックアウトすることもできます。これは実際にヘッダーファイルを表示します。それらのどれも、言うまでもなく実際にはチュートリアルではないと思いますが、それらは良い出発点です。

1
Joe Tyman