Quantas passagens o pré-processador C faz?

Quantas passagens o pré-processador C faz sobre o código?

Eu testei o seguinte código no gcc 4.7.2

#define a 5
#define b a
#define c b
#define d c
#define e d
#define f e
#define g f
#define h g
#define j h
#define k j
#define l k
#define m l

int main(void) {return d;}

Não há erro:

$ gcc -E 1.c
# 1 "1.c"
# 1 "<command-line>"
# 1 "1.c"
# 14 "1.c"
int main(void) {return 5;}

É um comportamento padrão?

questionAnswers(1)

yourAnswerToTheQuestion