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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.