どんどん分からなくなってきました.>>272 >>273 レスありがとうございます.
if >>272
char str[] = "abc";
char * str = "abc";

前者:ただの char型の配列(自動変数)
後者:文字列リテラル "abc" の先頭アドレスを格納するポインタ str 自身は自動変数だけど,
宣言・初期化が,どこで行われようとも "abc" という文字列はプログラムの実行中
常にどこぞかのメモリ領域を占有することになる.

if >>273
後者の宣言・初期化を行ったとき,ブロック内処理を終えると同時に,
文字列も姿を消し利用可能なメモリ領域となる.

う〜ん,所で >>273 のようであるとしたら,結局
#define STR(x) #x
hogeprint( value, STR(value));
のときの "value" は,関数(hogeprint)内でのみ存在するのでしょうか?

逆に, >>272 であるとすれば,
printf("hogehoge %d\n", value); を行うプログラムでは
実行中ずっと "hogehoge %d\n" という文字列リテラルを,
どこぞかのメモリ領域に有していることになる???