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