我想知道我们是否可以在C/C++中使用递归宏?如果是,请提供示例.
第二件事:为什么我不能执行下面的代码?我到底在做什么错误的事?是因为递归宏吗?
# define pr(n) ((n==1)? 1 : pr(n-1))
void main ()
{
int a=5;
cout<<"result: "<< pr(5) <<endl;
getch();
}
我想知道我们是否可以在C/C++中使用递归宏?如果是,请提供示例.
第二件事:为什么我不能执行下面的代码?我到底在做什么错误的事?是因为递归宏吗?
# define pr(n) ((n==1)? 1 : pr(n-1))
void main ()
{
int a=5;
cout<<"result: "<< pr(5) <<endl;
getch();
}
您的编译器可能会提供一个选项,只进行预处理,而不进行实际编译.如果您试图查找宏中的问题,这将非常有用.例如,使用g++ -E
:
> g++ -E recursiveMacro.c
# 1 "recursiveMacro.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "recursiveMacro.c"
void main ()
{
int a=5;
cout<<"result: "<< ((5==1)? 1 : pr(5 -1)) <<endl;
getch();
}
如您所见,它不是递归的.pr(x)
在预处理期间仅替换一次.需要记住的重要一点是,预处理器所做的一切只是盲目地用一个文本字符串替换另一个文本字符串,它实际上并不计算像(x == 1)
这样的表达式.
您的代码不会编译的原因是pr(5 -1)
没有被预处理器替换,因此它最终在源代码中作为对未定义函数的调用而结束.