为了账号安全,请及时绑定邮箱和手机立即绑定

我们可以有递归宏吗?

我们可以有递归宏吗?

C++ C
BIG阳 2019-09-21 11:19:19
我想知道我们是否可以在C / C ++中使用递归宏?如果是,请提供示例示例。第二件事:为什么我无法执行以下代码?我在做什么错?是因为递归宏吗?# define pr(n) ((n==1)? 1 : pr(n-1))void main (){    int a=5;    cout<<"result: "<< pr(5) <<endl;    getch();}
查看完整描述

3 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

您的编译器可能提供了仅预处理而不实际编译的选项。如果您要在宏中查找问题,这将很有用。例如使用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)是没有被预处理器替换,因此它最终作为对未定义函数的调用而出现在源代码中。


查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 850 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信