Я хочу распечатать значение size_t
переменная с помощью printf
в C ++ с использованием Microsoft Visual Studio 2010 (я хочу использовать printf
вместо <<
в этом конкретном куске кода, поэтому, пожалуйста, никаких ответов, говорящих мне, что я должен использовать <<
вместо).
По сообщению
правильный независимый от платформы способ заключается в использовании %zu
, но это не похоже на работу в Visual Studio. Документация по Visual Studio по адресу
http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx
говорит мне, что я должен использовать %Iu
(используя заглавные буквы i
, не строчные l
).
Microsoft не следует стандартам здесь? Или стандарт был изменен с C99? Или стандарт отличается между C и C ++ (что мне кажется очень странным)?
MS Visual Studio не поддерживает %zu
спецификатор printf перед VS2013
, Начиная с VS2013 (например, _MSC_VER
> = 1800
) %zu
доступен.
В качестве альтернативы, для предыдущих версий Visual Studio, если вы печатаете небольшие значения (например, количество элементов из контейнеров std), вы можете просто привести к int
и использовать %d
:
printf("count: %d\n", (int)str.size()); // less digital ink spent
// or:
printf("count: %u\n", (unsigned)str.size());
Документация Microsoft состояния:
hh
,j
,z
, а такжеt
префиксы длины не поддерживаются.
И поэтому %zu
не поддерживается.
В нем также говорится, что правильный префикс для использования для size_t
является I
— так что вы бы использовать %Iu
,
Компилятор C от Microsoft не догоняет последние стандарты C. Это в основном компилятор C89 с некоторыми чертами C99 (например, long long
). Таким образом, не должно быть ничего удивительного, что что-то не поддерживается (%zu
появился в с99).
На основании ответа от Вот, %z
это дополнение C99. Поскольку MSVC не поддерживает ни один из более поздних стандартов C, неудивительно, что %z
не поддерживается