Тема: C uin32_t uint64_t
Сьогодні навалився на наступний баг
#include <stdio.h>
#include <stdint.h>
#include <limits.h>
void f(uint32_t a) // мало б бути uint64_t
{
printf("%x\n", a);
printf("__WORDSIZE = %u\n", __WORDSIZE);
}
int main(void) {
uint64_t a = -1;
f(a); // ?
return 0;
}
Тобто uint64_t перетворюється в uint32_t і ніякого loses precision при -Wall. Я б ще зрозумів це при __WORDSIZE = 32, але при 64 мене дивує чого компілятор мовчить.
Хтось може пояснити чого так?