首页 > 后端开发 > C++ > C/C 中可以实现递归宏吗?

C/C 中可以实现递归宏吗?

Barbara Streisand
发布: 2024-12-06 09:05:12
原创
292 人浏览过

Can Recursive Macros Be Implemented in C/C  ?

探索 C/C 中的递归宏:扩展的艺术

递归宏是否存在?

虽然缺少宏C/C中固有的递归能力,存在一条实现的路径类似递归的行为。使用延迟表达式和间接寻址的组合,可以创建模拟递归的复杂宏。

它是如何工作的

要制作递归宏,我们必须拥抱多重步骤过程:

  1. 阻碍自扩展: 通过创建禁用上下文来防止宏停止其扩展。
  2. 间接: 使用间接将扩展推迟到稍后阶段。
  3. 扩展:应用多次扫描来完成扩展

示例:递归重复宏

这是递归重复宏的说明:

#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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板