I am storing a `char` in a `long` variable and trying to print it using `printf`. 

```
long a = 'A';
printf("%c \n",a);

```

Considering *default argument promotions* the arguments get promoted to `int` but as `long` has higher rank than `int` it should not get promoted (or actually demoted) to `int`.

Now if it doesn't get promoted to `int` , in the printf statement isn't there a type mismatch as we are trying to print a `long` variable using `%c`. According to C standard this behavior should be undefined but the compiler is perfectly printing `A` as output without any error or warning. Why is it so ?

I am working on GCC codeblocks compiler.