The unsigned value of c is the largest value an integer can hold. Where as a signed value of c is -1. But if you print C as hexadecimal you receive 0xffffffff
so it strictly comes to representation and consistency. -1 Can be treated as signed if you want it to be and unsigned if you don't want it to be. Try this code.
int x = 0xffffffff;
printf("%d",x);
It will print -1. So when comparing types you also have to be consistent of do you want the comparison and representation to be signed or unsigned?
Your code can be fixed with a simple cast.
int a;
int c;
unsigned int b;
a = b = 10;
c = -1;
if((int)(a+b) > c)
printf("True\n");
else
printf("False\n");