У меня есть код на С++, который печатает size_t
:
size_t a;
printf("%lu", a);
Я бы хотел, чтобы это компилировалось без предупреждений на обеих 32- и 64-разрядных архитектурах.
Если это C99, я мог бы использовать printf("%z", a);
. Но AFAICT %z
не существует ни на одном стандартном диалекте С++. Поэтому вместо этого я должен делать
printf("%lu", (unsigned long) a);
что действительно уродливо.
Если нет возможности для печати size_t
, встроенного в язык, мне интересно, можно ли написать оболочку printf или что-то подобное, чтобы вставить соответствующие приведения на size_t
, чтобы исключить ложные предупреждения компилятора при сохранении хорошие.
Любые идеи?
Изменить Чтобы выяснить, почему я использую printf: у меня есть относительно большая база кода, которую я очищаю. Он использует обертки printf, чтобы делать такие вещи, как "написать предупреждение, записать его в файл и, возможно, выйти из кода с ошибкой". Я мог бы собрать достаточно С++ - foo, чтобы сделать это с помощью оболочки cout, но я бы не стал изменять каждый вызов warn() в программе, чтобы избавиться от некоторых предупреждений компилятора.