#define hoge "world"したときにprintf("%s", hoge);はできないことが知られている。%s はポインタで示された先のメモリを文字列としてフォーマットする記法のはずだね。ここで hoge はポインタではなく "world" という文字列でしかなく、プリプロセッサがそれを置き換えてしまうので、コンパイル時に文法エラーが出るんじゃないかな。