Как мне печатать такие типы, как off_t и size_t?
Чтобы напечатать off_t
:
printf("%jd\n", (intmax_t)x);
Чтобы напечатать portable size_t
:
printf("%zu\n", x);
Чтобы напечатать ssize_t
:
printf("%zd\n", x);
См. 7.19.6.1/7 portability в стандарте C99 или более portability удобную документацию POSIX format-specifiers по кодам форматирования:
http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html
Если portability ваша реализация не поддерживает c эти коды форматирования (например, потому portability что вы используете C89), тогда format-string у вас есть небольшая проблема, поскольку format-string AFAIK нет целочисленных типов format-specifiers в C89, которые имеют коды format-specifiers форматирования и гарантированно format-specifiers быть такими же большими, как format-specifiers эти типы. Итак, вам нужно portable сделать что-то зависящее format-specifiers от реализации.
Например, если format-string ваш компилятор имеет long long
, а format-string ваша стандартная библиотека format-string поддерживает %lld
, вы можете portable с уверенностью ожидать, что c он будет служить вместо intmax_t
. Но portable если этого не произойдет, вам c придется вернуться к long
, что portable приведет к сбою в некоторых c других реализациях, потому portable что он слишком мал.
c
portability
format-specifiers
Как мне печатать такие типы, как off_t и size_t?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.