LINUX.ORG.RU

%d vs %ld


0

0
Код вида:

unsigned int x = 10;
printf("%d\n", x);

на что естественно имею предупреждение: format ‘%ld’ expects type ‘long int’, but argument 2 has type ‘unsigned int’

Какие потенциальные проблемы могут от этого быть (на x86)? Знаю что можно тупо поправить на %d, но просто интересно.
> Какие потенциальные проблемы могут от этого быть

караван ограбят

dilmah ★★★★★
()
если sizeof(long) > sizeof(int) и x >= 0x80000000, товывод будет отрицательным (знаковое расширение)
rei3er
()
Ответ на: комментарий от rei3er
sizeof(long) тут вообще не при чём, равно как и модификатор l.
kemm
()
Попробуй printf("%d %d %d %d %f\n", 17, 0.0, 42, 1.0); на x86 и на x86_64.
const86 ★★★★★
()
>Какие потенциальные проблемы могут от этого быть (на x86)?
на 32-х битной - число может вывести отрицательным.
на x86_64 - прочитает мусор и выведет неправильное число.
xydo ★★
()
Ответ на: комментарий от xydo
особенно забавные эффекты могут появляться в комбинации с %s
dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.