¿Qué tipo para restar 2 size_t's?

¿Qué tipo de C debería usarse para representar la diferencia entre los tamaños de dos objetos?

Comosize_t esta sin firmar, algo como

size_t diff = sizeof (small_struct) - sizeof (big_struct);

obviamente no sería correcto y me parece que no hay un equivalente real firmado.

ptrdiff_t Suena un poco tentador, pero

como su nombre lo dice es para restar punteros.He leído que por ejemplo Las plataformas segmentadas como DOS tienen un tamaño de objeto máximo de 64k, que se puede representar en 16 bits. Sin embargo, los punteros lejanos están compuestos por un valor de segmento de 16 bits y un valor de desplazamiento de 16 bits. No seria esoptrdiff_t ¿En tal plataforma de 32 bits también? Si es así, la diferencia entre dos objetos de tamaño solo requiere 16 bits, pero el uso de ptrdiff_t le dará una variable de 32 bits de ancho, por lo que es subóptima.

Entonces, ¿cuál es un tipo adecuado y portátil para trabajar con ese valor?

Edit: Sé sobre ssize_t, pero es

no es parte de la norma C.en realidad no está destinado para tal uso, sino para devolver un valor de error de tamaño o (negativo).

Respuestas a la pregunta(4)

Su respuesta a la pregunta