У меня есть код 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
встроенных средств для печати s, мне интересно, можно ли написать оболочку printf или что-то подобное, которое будет вставлять соответствующие приведения в size_t
s, чтобы устранить ложные предупреждения компилятора, сохраняя при этом хорошие.
Любые идеи?
Изменить Чтобы прояснить, почему я использую printf: у меня относительно большая база кода, которую я очищаю. Он использует оболочки printf, чтобы делать такие вещи, как «написать предупреждение, записать его в файл и, возможно, выйти из кода с ошибкой». Я мог бы собрать достаточно C ++ - foo, чтобы сделать это с помощью оболочки cout, но я бы предпочел не изменять каждый вызов warn () в программе, просто чтобы избавиться от некоторых предупреждений компилятора.