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 %z
nie 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_t
s wbudowanych w język, zastanawiam się, czy można napisać opakowanie printf lub coś takiego, które wstawi odpowiednie rzutowania na size_t
s, 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.