c – 我们可以有递归宏吗?

我想知道我们是否可以在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)没有被预处理器替代,所以它最终在源中调用未定义的函数。

http://stackoverflow.com/questions/12447557/can-we-have-recursive-macros

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 我们可以有递归宏吗?