猿问

我们可以有递归宏吗?

我想知道我们是否可以在C / C ++中使用递归宏?如果是,请提供示例示例。


第二件事:为什么我无法执行以下代码?我在做什么错?是因为递归宏吗?


# define pr(n) ((n==1)? 1 : pr(n-1))

void main ()

{

    int a=5;

    cout<<"result: "<< pr(5) <<endl;

    getch();

}


BIG阳
浏览 851回答 3
3回答

HUWWW

您的编译器可能提供了仅预处理而不实际编译的选项。如果您要在宏中查找问题,这将很有用。例如使用g++ -E:> g++ -E recursiveMacro.c# 1 "recursiveMacro.c"# 1 "<built-in>"# 1 "<command line>"# 1 "recursiveMacro.c"void main (){&nbsp; &nbsp; int a=5;&nbsp; &nbsp; cout<<"result: "<< ((5==1)? 1 : pr(5 -1)) <<endl;&nbsp; &nbsp; getch();}如您所见,它不是递归的。pr(x)在预处理期间仅被替换一次。要记住的重要一点是,预处理器所做的全部工作就是盲目地将一个文本字符串替换为另一个文本字符串,而实际上并没有计算类似的表达式(x == 1)。您的代码无法编译的原因pr(5 -1)是没有被预处理器替换,因此它最终作为对未定义函数的调用而出现在源代码中。
随时随地看视频慕课网APP
我要回答