Here's an example program:
#include <stdio.h>
int main(void)
{
long long a = 10;
printf("%u\n", a);
return 0;
}
It produces this warning: main.c(6): warning #2234: Argument 2 to 'printf' does not match the format string; expected 'int' but found 'long long int'.
It's similar for llu, u, x, etc. any specifier that deals with unsigned types.
It will produce a warning if a type of wrong size is used (so using int with x or u, or unsigned with d is fine even with no explicit cast to right type) but will say that it expected the signed type of that width (so when you pass something of other size to u, it will say int in the warning, not unsigned int).