Я хочу знать, как препроцессор C обрабатывает круговые зависимости (от #defines). Это моя программа:
#define ONE TWO 
#define TWO THREE
#define THREE ONE
int main()
{
    int ONE, TWO, THREE;
    ONE = 1;
    TWO = 2;
    THREE = 3;
    printf ("ONE, TWO, THREE = %d,  %d, %d \n",ONE,  TWO, THREE);
}
Здесь представлен вывод препроцессора. Я не могу понять, почему вывод такой. Я хотел бы знать различные шаги, которые препроцессор берет в этом случае, чтобы дать следующий вывод.
# 1 "check_macro.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "check_macro.c"
int main()
{
 int ONE, TWO, THREE;
 ONE = 1;
 TWO = 2;
 THREE = 3;
 printf ("ONE, TWO, THREE = %d,  %d, %d \n",ONE, TWO, THREE);
}
Я запускаю эту программу на linux 3.2.0-49-generic-pae и компилирую в gcc версии 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5).