#include <stdio.h>
//#define tinyvar(var) (var&=0xF)
int suntypes (char tamanho,char flag) {
    int n;
    if (!flag) n = (tamanho <= 2 ? (tamanho*8)-tamanho : (tamanho*8)-tamanho+1);
    else n = tamanho*8-(tamanho>>1);
    return (tamanho<<n)-1;
}
int main() {
    int i = sizeof(int);
    printf("Valor maximo signed: %d, unsigned: %u\n",suntypes(i,0),suntypes(i,1));
    system("pause");
    return 0;
}  Como podem ver, essa função retorna o máximo que um tipo de variável suporta, exceto double e float.