Który z liter C powinien być użyty do przedstawienia różnicy między rozmiarami dwóch obiektów?Jaki typ odjąć 2 size_t's?
Jak size_t
jest niepodpisany, coś
size_t diff = sizeof (small_struct) - sizeof (big_struct);
oczywiście nie byłoby poprawne i wydaje mi się, że nie ma rzeczywistego podpisane równoważne.
ptrdiff_t
brzmi rodzaju kuszące, ale
- jak jego nazwa mówi, że to za odjęcie wskazówek.
- Przeczytałem to np. Segmentowane platformy, takie jak DOS, mają maksymalny rozmiar obiektu 64 tys., który można przedstawić za pomocą 16-bitów. Dalekie wskaźniki są jednak złożone z 16-bitowej wartości segmentu i 16-bitowej wartości offsetu. Czy to nie sprawiłoby, że
ptrdiff_t
również na takiej platformie 32-bitowej? Jeśli tak, różnica między dwoma obiektami wymagała tylko 16-bitowego rozmiaru, ale użycie ptrdiff_t dałoby 32-bitową zmienną szeroką, co czyni ją nieoptymalną.
Jaki jest zatem odpowiedni przenośny typ do pracy z taką wartością?
Edit:
wiem o ssize_t, ale to
- nie jest częścią standardowej C.
- faktycznie nie są przeznaczone do takiego użytku, ale o powrocie bądź wielkość lub (ujemne) wartości błędu.
'ssize_t' jest podpisany' size_t' –
@AFAIK 'ssize_t' jest POSIX, nie ISO C. –
@RomanR. 'ssize_t' nie jest C Standardem i nie ma gwarancji, że wartość' size_t' zmieści się w 'ssize_t' w POSIX. – ouah