>백엔드 개발 >C++ >C/C 매크로를 사용하여 재귀 기능을 어떻게 달성할 수 있습니까?

C/C 매크로를 사용하여 재귀 기능을 어떻게 달성할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-08 08:32:10170검색

How Can Recursive Functionality Be Achieved with C/C   Macros?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.