Я хочу знать, как препроцессор 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).