你能解释一下这段代码吗?

时间:2010-08-14 17:07:38

标签: c++ c-preprocessor

#include <stdio.h>
#include CONST15
#define CONST2 CONST2*CONST1
#define CONST3 CONST2+CONST2
int main(int argc,char**argv)
{
printf("%\n",CONST3);
}

1 个答案:

答案 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.