#include <stdio.h>
#include CONST15
#define CONST2 CONST2*CONST1
#define CONST3 CONST2+CONST2
int main(int argc,char**argv)
{
printf("%\n",CONST3);
}
Во-первых, предварительная обработка, которая представляет собой шаг, на котором расширяются # определенных символов, происходит перед фактической компиляцией.
Тогда я не думаю, что такой символ может быть рекурсивным, но его можно заменить. Так что, если это полная программа, и если предположить, что
не определяет CONST15 или CONST2, вы не получите никаких разумных результатов. Мой компилятор выдает ошибку в строке #include, в которой не указано, что включить.
Однако вы можете скомпилировать его, определяя некоторые символы во время компиляции, например:
gcc -DCONST15='"math.h"' -DCONST1=3 -DCONST2=5 foo.c
Это даст #include что-то (безвредное) для работы и предоставит значение для CONST1 и CONST2.
Тогда первое определение установит CONST2 в 3 * 5 (именно так, а не 15), а затем второе определение установит CONST3 в 3 * 5 + 3 * 5.