Mam kod w C ++, który wyświetla size_t:
size_t a;
printf("%lu", a);
Chciałbym, aby kompilacja przebiegła bez ostrzeżeń na architekturach 32- i 64-bitowych.
Gdyby to był C99, mógłbym użyć printf("%z", a);. Ale AFAICT %znie istnieje w żadnym standardowym dialekcie C ++. Więc zamiast tego muszę zrobić
printf("%lu", (unsigned long) a);
co jest naprawdę brzydkie.
Jeśli nie ma możliwości drukowania size_ts wbudowanych w język, zastanawiam się, czy można napisać opakowanie printf lub coś takiego, które wstawi odpowiednie rzutowania na size_ts, aby wyeliminować fałszywe ostrzeżenia kompilatora, jednocześnie zachowując dobre.
Jakieś pomysły?
Edytuj Aby wyjaśnić, dlaczego używam printf: Mam stosunkowo dużą bazę kodu, którą czyszczę. Używa opakowań printf do wykonywania takich czynności, jak „napisz ostrzeżenie, zaloguj się do pliku i prawdopodobnie zamknie kod z błędem”. Być może uda mi się zebrać wystarczającą liczbę C ++ - foo, aby to zrobić za pomocą opakowania cout, ale wolałbym nie zmieniać każdego wywołania warn () w programie tylko po to, aby pozbyć się niektórych ostrzeżeń kompilatora.