У мене є код C ++, який друкує size_t
:
size_t a;
printf("%lu", a);
Я хотів би, щоб це компілювалось без попереджень як для 32-, так і для 64-розрядної архітектури.
Якби це був C99, я міг би використати printf("%z", a);
. Але AFAICT %z
не існує в жодному стандартному діалекті С ++. Тому натомість я маю це зробити
printf("%lu", (unsigned long) a);
що насправді негарно.
Якщо немає можливості для друку size_t
s, вбудованої в мову, цікаво, чи можна написати обгортку printf або щось таке, що вставить відповідні відливки на size_t
s, щоб усунути помилкові попередження компілятора, зберігаючи при цьому хороші.
Якісь ідеї?
Редагувати Щоб пояснити, чому я використовую printf: У мене є відносно велика база коду, яку я прибираю. Він використовує обгортки printf, щоб робити такі речі, як "написати попередження, увійти в файл і, можливо, вийти з коду з помилкою". Можливо, я зможу зібрати достатньо C ++ - foo, щоб зробити це за допомогою обгортки cout, але я волів би не змінювати кожен виклик warn () у програмі, аби позбутися деяких попереджень компілятора.
"%l"
? Чи не завжди це буде правильного розміру? Або портативність має значення?