Lo que he hecho a veces en el pasado se utiliza un tipo de datos más grande, y luego cuando convierto a mi tipo más pequeño, de inmediato convertir de nuevo al tipo más grande y comprobar que el valor no cambió
Por ejemplo, digamos que usted usa un int64_t lugar, entonces usted podría tener algo como:
int64_t my_pid64;
/* ... parse string value into my_pid64 ... */
pid_t my_pid = (pid_t) my_pid64;
if ((int64_t) my_pid != my_pid64) /* check that value was not out of range of pid_t */
{
/* ... handle error ... */
}
No hay gran opción para el tipo de datos más grande de usar. "largo" solía ser el tipo de datos entero primitivo más grande, pero eso ya no es cierto en algunos compiladores/arquitecturas comunes, incluso para Linux (ver comentarios a continuación). Mientras tanto, el tipo intmax_t tiene poca compatibilidad con la biblioteca. El resultado es que int64_t a veces es más útil en la práctica.
Pero, básicamente, sus opciones para un tipo de datos más grande son probablemente largas, int64_t e intmax_t.
no es 'sizeof' suficiente para su propósito? (No estoy seguro de por qué necesitarías eso, ¿te importaría elaborar?) – Mat
'/ proc/sys/kernel/pid_max' define el pid máximo, que puedes editar. –
@KingsIndian, gracias. Me refiero al máximo del tipo, no al valor máximo del sistema en la práctica. – pilcrow