Я хочу распечатать переменную типа size_t
в C, но оказывается, что size_t
псевдонимы разных типов переменных на разных архитектурах. Например, на одном компьютере (64-разрядная версия) следующий код не бросает никаких предупреждений:Независимая от платформы size_t Спецификаторы формата в c?
size_t size = 1;
printf("the size is %ld", size);
но на моей другой машине (32-разрядная версия) выше код выдает следующее предупреждение:
предупреждение: формат «% л.д.» ожидает типа «длинный ИНТ *», но аргумент 3 имеет тип «size_t *»
Я подозреваю, что это из-за разницы в размере указателя, так что на мой 64-разрядная машина size_t
имеет псевдоним long int
("%ld"
), тогда как на моей 32-разрядной машине size_t
сшивается другим типом.
Есть ли спецификатор формата для size_t
?
Ваше предупреждающее сообщение не соответствует коду. Предупреждение указывает указатели, ваш код не имеет. Вы удалили какой-нибудь «&» где-нибудь? – Jens
Указатели? Нет. Я не получаю никаких предупреждений о указателях, ведь в зависимости от того, на какой машине я запускаю этот код, иногда я не получаю никаких предупреждений. Попробуйте следующий испытательный код: #include int main() { size_t size = 1; printf («размер% ld», размер); return 0; } –
См. Также [Кросс-платформенная форма для переменных типа size_t?] (Http://stackoverflow.com/questions/174612/cross-platform-format-string-for-variables-of-type-size-t) , – legoscia