2

uint64_tと を使用して、16 進文字列からいくつかの値を読み込みたいと思いprintfますscanf

私が使用しているすべてのプラットフォームでlongorのサイズが同じであるとは限らlong longないため、次のようなフォーマット文字列を使用する"%llx"と、long long が 128 ビットのプラットフォームでは警告が"%lx"表示され、long long が 64 ビット (および long long より小さい) のプラットフォームでは警告が表示されます。 )。

私が最初に考えたのは、フォーマット文字列をマクロで定義することでしたが、sizeof はマクロ式ではサポートされていません。

できれば警告なしで、どのプラットフォームでも機能するようにフォーマット文字列を定義する方法はありますか?

4

1 に答える 1

5

のフォーマット文字列uint64_tはマクロで定義されていますPRIu64

例えば:

uint64_t foo = 0;

printf("%" PRIu64 "\n", foo);

にも同様のフォーマット文字列が存在しますがscanf、この場合はSCNu64です。これらは で定義されたマクロ<inttypes.h>です。

于 2014-09-11T07:52:39.767 に答える