int sin firmar frente a size_t
Noto que el código moderno C y C++ parece usarse size_t
en lugar de int
/ unsigned int
prácticamente en todas partes, desde parámetros para funciones de cadena C hasta STL. Tengo curiosidad por saber el motivo de esto y los beneficios que aporta.
El size_t
tipo es el tipo entero sin signo que es el resultado del sizeof
operador (y el offsetof
operador), por lo que se garantiza que será lo suficientemente grande como para contener el tamaño del objeto más grande que su sistema pueda manejar (por ejemplo, una matriz estática de 8 Gb).
El size_t
tipo puede ser mayor, igual o menor que an unsigned int
, y su compilador podría hacer suposiciones al respecto para su optimización.
Puede encontrar información más precisa en el estándar C99, apartado 7.17, cuyo borrador está disponible en Internet en formato pdf , o en el estándar C11, apartado 7.19, también disponible en borrador pdf .
El C clásico (el dialecto temprano de C descrito por Brian Kernighan y Dennis Ritchie en The C Programming Language, Prentice-Hall, 1978) no proporcionaba size_t
. El comité de estándares C introducido size_t
para eliminar un problema de portabilidad
Explicado en detalle en embeded.com (con un muy buen ejemplo)