Я написал этот крошечный код:
#include <stdio.h>
int main() {
size_t temp;
temp = 100;
printf("lld=%lld, ld=%ld, u=%u\n", temp, temp, temp);
return 0;
}
Я запускаю это на i386 GNU / Linux с gcc версии 4.1.1 20070105 (Red Hat 4.1.1-52) . Это вывод, который я получил:
lld=429496729700, ld=100, u=7993461
Я могу понять, что первый (lld
) был напечатан как мусор, потому что printf
пытается напечатать 8 байтов (для signed long long
, как обозначено lld
), когда только 4 байта доступны из переменной temp
.
Но я не понимаю, почему последний идентификатор, u
, печатается как мусор, в то время как в моем понимании это самый близкий применимый идентификатор для size_t
.
Здесь я предположил, что size_t
равно unsigned int
(что для моего i386 подписано 4 байта).
Теперь я немного изменил строку printf
:
...
printf("ld=%ld, u=%u, lld=%lld\n", temp, temp, temp);
...
и у меня есть прекрасный ответ (кроме части lld
).
ld=100, u=100, lld=34331653576851556
Может кто-нибудь помочь мне понять, что именно мне здесь не хватает?
Большое спасибо за любую помощь!
[примечание: я попытался включить / выключить оптимизацию с помощью тега gcc -O[0,2]
без каких-либо различий в наблюдении.]