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