weird wildcards in format string argument of printf

to output in decimal notation of a char variable, we write like this

1
2
char a1 = 'a';
printf("a1 is [%d].\n", a1);

in the way we output an int variable.

but when we output a long variable, we must write like below reluctantly

1
2
3
#need to test in gcc.
long l1 = 123456789;
printf("l1 is [%ld].\n", l1);

don't say byte alignment.