재귀 매크로가 존재할 수 있습니까?
매크로에는 부족하지만 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!