[Си] Ещё одна версия граблей с битностью и знаками
Продолжая тему этого...
в 32-битке выводит 0xffffffffc. Ура, товарищи.
Исходный код, по которому увидена проблема, содержал
#include <stdio.h>
#include <fcntl.h>
int main()
{
printf("%llx\n", (off_t)(-sizeof(int)));
return 0;
}
в 32-битке выводит 0xffffffffc. Ура, товарищи.
Исходный код, по которому увидена проблема, содержал
lseek(fd, -sizeof(buf), SEEK_END)
no subject
lseek(fd,-((off_t)sizeof(buf)),SEEK_END);
no subject
no subject
test.c: In function ‘main’:
test.c:6: warning: format ‘%llx’ expects type ‘long long unsigned int’, but argument 2 has type ‘long int’
$ ./a.out
804840bfffffffc
Убунта 32-битная.
no subject
no subject
1) %llx для off_t, а не long long;
2) унарный минус заведомо беззнакового выражения (sizeof).
no subject
Минус беззнакового - обычно не диверсия. Но тут хитрое сложение ситуаций.
no subject
no subject
no subject
no subject
Если речь про _FILE_OFFSET_BITS, меня те места, где он не 64, не интересуют по причине их безнадёжной отсталости.
no subject
no subject
no subject