エンディアン変換について質問があるんですが、

/* Big endian: */
#if !(defined(__alpha)||defined(__i386__)||defined(__vax__))
#define BIG_ENDIAN
#endif

こんな感じのコードをみかけます。
ダウンロードしてきたソースコード内を検索してみましたが、
defined(XXX)の中のXXXがマクロ定義されている部分は見つかりませんでした。
コンパイラさんは一体いつ、どこでXXXが定義されている、いないを判断しているんでしょうか

コンパイラは
gcc version 3.3.3
です。