Как использовать printf для отображения off_t, nlink_t, size_t и другие специальные типы?

Я ценю Вашу проблему, но думаю, что Вы определяете реализацию вместо проблемы, в которой Вы нуждаетесь решенный. Вместо того, чтобы преобразовать в фигурные скобки, как насчет того, чтобы работать над путем к Вашей программе экранного доступа, чтобы сказать Вам уровень отступа?

, Например, некоторые люди работали над синтаксисом энергии, окрашивающим для представления уровней отступа Python. Возможно, измененный синтаксис, окрашивающий, мог произвести что-то, что Ваша программа экранного доступа считает?

27
задан Ciro Santilli 新疆改造中心法轮功六四事件 19 May 2015 в 08:52
поделиться

1 ответ

Нет полностью переносимого способа сделать это, и это доставляет неудобства.

C99 предоставляет механизм для встроенных типов, таких как size_t с Нотация % zu (и есть несколько дополнительных аналогичных квалификаторов).

Она также предоставляет заголовок с макросами, такими как PRIX32, для определения правильного квалификатора для печать 32-битной шестнадцатеричной константы (в данном случае):

printf("32-bit integer: 0x%08" PRIX32 "\n", var_of_type_int32_t);

Для типов, определенных системой (например, определенных в POSIX), AFAIK, нет хорошего способа их обработки. Итак, что я делаю, так это догадываюсь о «безопасном» преобразовании и затем распечатываю соответственно, включая приведение, что вы иллюстрируете в вопросе. Это расстраивает, но я не знаю лучшего способа. В случае сомнений и использования C99, преобразование в ' unsigned long long 'довольно хорошо; может быть случай использования преобразования в uintmax_t и PRIXMAX или эквивалент.

Или, как FUZxxl напомнил мне, вы можете использовать модификатор j для обозначения целочисленного типа «макс». Например:

printf("Maximal integer: 0x%08jX\n", (uintmax_t)var_of_type_without_format_letter);
27
ответ дан 28 November 2019 в 05:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: