0

型が固定幅整数型 ( などuint32_t)の 1 つである変数の値を出力するには、 cinttypes(C++ の場合) またはinttypes.h(C の場合) ヘッダー ファイルをインクルードし、 のような書式指定子マクロを使用する必要があることはよく知られていますPRIu32wprintfしかし、関数が使用されているときに同じことを行うにはどうすればよいでしょうか? そのようなマクロは、Lプレフィックス付きの文字列リテラルとして展開する必要があります。

4

4 に答える 4

3

どこに問題があるのか​​ わかりませんが、ここ(VS 2015)の両方

wprintf(L"AA %" PRIu32 L" BB", 123);

printf("AA %" PRIu32 " BB", 123);

正しくコンパイルすると、次の出力が得られます。

AA 123 BB
于 2016-04-29T14:01:15.940 に答える
1

のマクロを使用する (より弱い) 代替手段<inttypes.h>は、固定幅の型を同等またはより大きな標準型に変換/キャストすることです。

wprintf(L"%lu\n", 0ul + some_uint32_t_value);
// or 
wprintf(L"%lu\n", (unsigned long) some_uint32_t_value);
于 2016-04-29T14:32:46.513 に答える
1

コンパイラが接頭辞の異なるリテラルの連結をサポートしていない場合でも、狭いものをいつでも拡張できます。

#define WIDE(X) WIDE2(X)
#define WIDE2(X) L##X

wprintf(L"%" WIDE(PRIu32), foo);

デモ

于 2016-04-29T14:18:18.943 に答える