Согласно C99, прототип для ftell
является:
long int ftell(FILE *stream);
Из того, что я недооценил, должно быть следующее:
fpos_t ftell(FILE *stream);
Это почему?
Из §7.19.1-2
fpos_t
который является типом объекта, отличным от типа массива, способного записывать всю информацию, необходимую для уникального указания каждой позиции в файле.
Я понимаю, что fpos_t
должен использоваться для записи позиции в файле. Таким образом, ftell
который возвращает позицию в файле, должен быть такого типа. Вместо этого это:
-
signed
- типа
long
который может быть слишком маленьким или слишком большим для доступа к файлу на определенных архитектурах.