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 サイトの他の関連記事を参照してください。