This works for a literal, but the author was probably thinking of "print a string that comes from somewhere else" where you do the first thing to avoid format characters to be interpreted.
[0] https://gist.github.com/shakna-israel/4fd31ee469274aa49f8f97...
printf("%p\n", v);
the Generic call must look like this displayln((const void *)v);
is it really better? void* v;
v = ...;
...
displayln(v);