ホームページ >バックエンド開発 >C++ >C/C マクロを使用して再帰的機能をどのように実現できますか?

C/C マクロを使用して再帰的機能をどのように実現できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-08 08:32:10174ブラウズ

How Can Recursive Functionality Be Achieved with C/C   Macros?

C/C の再帰マクロ

C/C マクロは再帰を直接サポートしません。ただし、プリプロセッサのトリックを使用して再帰機能を実現する方法があります。

遅延式を使用したアプローチ:

このアプローチでは、マクロが青く塗られるのを防ぐために遅延式を利用します。

#define EMPTY(...)
#define DEFER(...) __VA_ARGS__ EMPTY()
#define OBSTRUCT(...) __VA_ARGS__ DEFER(EMPTY)()
#define EXPAND(...) __VA_ARGS__

#define pr_id() pr
#define pr(n) ((n==1)? 1 : DEFER(pr_id)()(n-1))

このアプローチでは再帰が可能ですが、必要があります。複数の展開で再帰を完了します。

例: 再帰的繰り返しマクロ:

再帰的繰り返しマクロの例を次に示します:

#define REPEAT(count, macro, ...) \
    WHEN(count) \
    ( \
        OBSTRUCT(REPEAT_INDIRECT) () \
        ( \
            DEC(count), macro, __VA_ARGS__ \
        ) \
        OBSTRUCT(macro) \
        ( \
            DEC(count), __VA_ARGS__ \
        ) \
    )
#define REPEAT_INDIRECT() REPEAT

例使用法:

// An example of using the recursive repeat macro
#define M(i, _) i
EVAL(REPEAT(8, M, ~)) // 0 1 2 3 4 5 6 7

結論:

C/C マクロは再帰を直接サポートしていませんが、deferred などのプリプロセッサ トリックを通じて再帰を実現することは可能です。式とカスタム マクロ。これらのメソッドは、マクロ定義で再帰機能が必要な特殊な場合に役立ちます。

以上がC/C マクロを使用して再帰的機能をどのように実現できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。