En el estandar C99 para que los programas sean compatibles en distintos sistemas, se crea el archivo stdint.h.
Por ejemplo...
Un int para un PIC es una variable de 8 bits, para algunas PC es de 16 y para otras 32bits. Entones imagínate creando un contador donde necesitas si o si los 32 bits pero de repente en otra maquina solo usa 16 u 8.... O incluso peor, hay diferencias entre compiladores de PIC.
CCS:
short - 1 bit
char - 8 bits
int - 8 bits
long - 16 bits
long long - 32 bits
XC8:
bit - 1 bit
char - 8 bits
int/short - 16 bits
short long - 24 bits
long long - 32 bits
Imaginate tratar de recordar para cada compilador cuantos bits tiene cada uno.
Para evitar esto esta el archivo stdint.h, el cual dependiendo del sistema va a crear un nuevo "tipo" el cual va a llamar uintn_t (para sin signo-unsigned) o intn_t (con signo-signed)
el _t es para indicar que es un tipo, es decir dentro del stdint.h de CCS en un pic tendrías algo asi:
typedef uint8_t int;
typedef int8_t signed int;
Entonces uint8_t es resumidamente un tipo (_t), es decir no es una variable, unsigned (u) , entero (int), de 8 bits ( 8 )