递归宏是否存在?
虽然缺少宏C/C中固有的递归能力,存在一条实现的路径类似递归的行为。使用延迟表达式和间接寻址的组合,可以创建模拟递归的复杂宏。
它是如何工作的
要制作递归宏,我们必须拥抱多重步骤过程:
示例:递归重复宏
这是递归重复宏的说明:
#define REPEAT(count, macro, ...) \ WHEN(count) \ ( \ OBSTRUCT(REPEAT_INDIRECT) () \ ( \ DEC(count), macro, __VA_ARGS__ \ ) \ OBSTRUCT(macro) \ ( \ DEC(count), __VA_ARGS__ \ ) \ )
此宏可以是像这样调用this:
EVAL(REPEAT(8, M, ~)) // Outputs: 0 1 2 3 4 5 6 7
示例执行问题
您提供的代码:
# define pr(n) ((n==1)? 1 : pr(n-1)) void main () { int a=5; cout<<"result: "<< pr(5) <<endl; getch(); }
由于递归宏问题而无法执行。 pr 宏仅依赖于递归,导致无限扩展。
解决方案
要解决此问题,您可以使用以下宏的非递归版本:
#define fact(n) ((n == 1)? 1 : n * fact(n - 1))
以上是C/C 中可以实现递归宏吗?的详细内容。更多信息请关注PHP中文网其他相关文章!