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