off_t
やのような型を印刷しようとしていますsize_t
。正しいプレースホルダーは何ですか?printf()
持ち運び可能な?
それとも、それらの変数を印刷するまったく異なる方法があるのでしょうか?
ベストアンサー1
印刷するoff_t
:
printf("%jd\n", (intmax_t)x);
印刷するsize_t
:
printf("%zu\n", x);
印刷するssize_t
:
printf("%zd\n", x);
C99 標準の 7.19.6.1/7 を参照するか、より便利な POSIX のフォーマット コードに関するドキュメントを参照してください。
http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html
実装がこれらのフォーマット コードをサポートしていない場合 (たとえば、C89 を使用している場合)、私の知る限り、C89 にはフォーマット コードがあり、これらの型と同じ大きさになることが保証されている整数型がないため、少し問題が発生します。そのため、実装固有の操作を行う必要があります。
たとえば、コンパイラに がありlong long
、標準ライブラリが をサポートしている場合%lld
、 が の代わりに機能すると確信できますintmax_t
。 しかし、 が機能しない場合は にフォールバックする必要がありますがlong
、 は小さすぎるため、他の実装では失敗する可能性があります。