#include <stdio.h>
#include CONST15
#define CONST2 CONST2*CONST1
#define CONST3 CONST2+CONST2
int main(int argc,char**argv)
{
printf("%\n",CONST3);
}
答案 0 :(得分:2)
首先,预处理是扩展#defined'd符号的步骤,在实际编译之前发生。
然后,我不认为这样的符号可以递归,但它可以被替换。因此,如果这是完整的程序,并且假设<stido.h>
没有定义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.