プリプロセッサに詳しい方にお聞きしたいのですが、ここの
このコードがどういう順番で展開されるために、NGなのか

#define str(s) #s   ①
#define foo 4      ②

str(foo);

下ではなぜOKなのか

#define xstr(s) str(s)
#define str(s) #s
#define foo 4

私には理解できませんでした。

#define JOIN(x, y) JOIN_AGAIN(x, y)
#define JOIN_AGAIN(x, y) x ## y

上ののコードもわかりませんでした。