References:
- Is there a way to print out the type of a variable/pointer in C?
- Why are C character literals ints instead of chars?
Was trying to find out the type of char/string literals in C. Found a hackish way of doing it.
Source code: test.c
#include <stdio.h>
int main()
{
char *s = "ABC";
printf("%f\n", s);
printf("%f\n", 'A');
printf("%f\n", "Hello World");
printf("%f\n", 42);
printf("%s\n", 42.0);
}
Compile with warning flag: gcc -Wall test.c
test.c: In function 'main':
test.c:6:12: warning: format '%f' expects argument of type 'double', but argument 2 has type 'char *' [-Wformat=]
printf("%f\n", s);
^
test.c:8:12: warning: format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]
printf("%f\n", 'A');
^
test.c:9:12: warning: format '%f' expects argument of type 'double', but argument 2 has type 'char *' [-Wformat=]
printf("%f\n", "Hello World");
^
test.c:11:12: warning: format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]
printf("%f\n", 42);
^
test.c:12:12: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'double' [-Wformat=]
printf("%s\n", 42.0);
^
Basically, use an incompatible format specifier for the literal/variable and let the compiler catch it. In the example above, the type for “argument 2” is indicated in the warnings.

