Una curiosidad un problema que tenia y he arreglado.
OJO !!
long id;
unsigned , int_uno,int c_dos, c_tres, c_cuatro, c_cinco;
id = ((c_uno * 10000)+(c_dos * 1000)+(c_tres * 100)+(c_cuatro * 10)+c_cinco);
Esto me daba un error en el id aunque no overflow, el problema es que al hacer c_uno * 10000 no lo hace en una variable temporal pero del tipo de c_uno, por lo que el resultado no pasaba de un unsigned int, lo que hay que hacer es declarar también c_uno como long y solucionamos el problema.