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))
실행 프로세스
pr(5)가 발생하면 다음 단계가 발생합니다.
재귀 반복 매크로
재귀형 매크로의 더 복잡한 예는 특정 작업을 실행하는 반복 매크로입니다. 코드를 지정된 횟수만큼 차단합니다.
#define REPEAT(count, macro, ...) \ WHEN(count) \ ( \ OBSTRUCT(REPEAT_INDIRECT) () \ ( \ DEC(count), macro, __VA_ARGS__ \ ) \ OBSTRUCT(macro) \ ( \ DEC(count), __VA_ARGS__ \ ) \ ) #define REPEAT_INDIRECT() REPEAT #define M(i, _) i
이 매크로는 다음과 같이 사용할 수 있습니다.
EVAL(REPEAT(8, M, ~)) // 0 1 2 3 4 5 6 7
제한 사항
재귀를 에뮬레이션하는 동안 매크로를 통해 수행하는 것은 가능하지만 잠재적인 성능 영향 및 코드 가독성 문제로 인해 일반적으로 나쁜 습관으로 간주됩니다. Modern C는 람다 표현식, 템플릿 메타프로그래밍과 같은 재귀를 위한 대체 메커니즘을 제공합니다.
위 내용은 C/C 매크로로 재귀를 어떻게 에뮬레이션할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!