Любопытно, я не ожидал, что это скомпилируется, но это так. Однако компилятору это не очень нравится:
..\main.c:4:7: warning: type defaults to 'int' in declaration of 'VARNAME'
..\main.c:4:17: warning: initialization makes integer from pointer without a cast
Таким образом, он принимает int в качестве типа по умолчанию, и, следовательно, VARNAME имеет значение указателя, так как строка является указателем (который позже может быть приведен как char *).
Это прекрасно работает (на компьютере с Intel IA32):
#include<stdio.h>
const VARNAME = "String of text";
int main()
{
printf("%s\n", (char*)VARNAME);
return 0;
}
Но я лично не стал бы использовать такую неявную типизацию. Как поясняется в комментариях ниже:
это даже опасно, так как sizeof (int) может быть меньше, чем
SizeOf (Char *)