Как правильно использовать printf для печати размера t?
Size_t определяется как unsigned целое число, но его размер зависит от того, находитесь ли вы на 32-или 64-разрядной машине. Каков правильный и портативный способ распечатать size_t?
3 ответа:
попробуйте использовать
%zuформат строкиsize_t val = get_the_value(); printf("%zu",val);часть z-это спецификатор длины, который говорит, что аргумент будет size_t в длину.
источник http://en.wikipedia.org/wiki/Printf#printf_format_placeholders
на этом есть тег C++, так что
cout <<еще один возможный ответ.Это удивительно трудно получить право во всех версиях C. В C90, бросая в
unsigned longдолжно работать, но это вполне может не работать в C99, и решения C99 не обязательно будут работать в C90. Возможность надежно различать C90 и C99 была введена в изменениях 1995 года (указание допустимых значений для__STDC__). Я не думаю, что есть полностью портативный способ, который работает для С90, C99 и C++, хотя есть решения для любого отдельного из них.
Я думаю, что ответ на C++:
std::size_t n = 1; std::cout << n;для C-style IO это немного сложнее. В C99 они добавили
zмодификатор длины дляsize_tзначения. Однако до TR1 это не поддерживается, поэтому вы остаетесь с приведением к определенному размеру, например:std::size_t n = 1; std::printf("%lu\n", static_cast<unsigned long>(n));потом опять
unsigned long longна самом деле не поддерживается C++ в любом случае, так что выше будет работать нормально, так какunsigned longявляется крупнейшим юридическим интегральным типом. После TR1 вы можете использовать%zuбезопасно дляsize_tзначения.