再帰マクロは存在できますか?
マクロには不足があるのですがC/C には固有の再帰機能があり、再帰的なものを実現するための道が存在します。 行動。遅延式と間接演算を組み合わせて使用すると、再帰をシミュレートする複雑なマクロを作成できます。
仕組み
再帰マクロを作成するには、マルチマクロを採用する必要があります。 -ステッププロセス:
例: 再帰的繰り返しマクロ
再帰的繰り返しマクロの例を次に示します。
#define REPEAT(count, macro, ...) \ WHEN(count) \ ( \ OBSTRUCT(REPEAT_INDIRECT) () \ ( \ DEC(count), macro, __VA_ARGS__ \ ) \ OBSTRUCT(macro) \ ( \ DEC(count), __VA_ARGS__ \ ) \ )
このマクロは次のようになります。のように呼び出されますこれ:
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 中国語 Web サイトの他の関連記事を参照してください。