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 중국어 웹사이트의 기타 관련 기사를 참조하세요!