> 백엔드 개발 > C++ > 선택적 매크로 매개변수를 C에서 어떻게 구현할 수 있습니까?

선택적 매크로 매개변수를 C에서 어떻게 구현할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-11-15 07:53:02
원래의
959명이 탐색했습니다.

How Can Optional Macro Parameters Be Implemented in C  ?

C 전처리기가 있는 선택적 매크로

C에서 선택적 매크로 매개변수는 코드 유연성을 향상시킬 수 있습니다. 이를 구현하는 방법은 오버로딩 스타일 매크로를 사용하는 것입니다. 이 기술이 어떻게 작동하는지 살펴보겠습니다.

한 가지 접근 방식은 매크로 인수 목록을 두 번 활용하는 것입니다. 먼저 도우미 매크로의 이름을 구성합니다. 둘째, 적절한 도우미 매크로에 인수를 전달합니다. 매크로 인수 수를 결정하기 위해 표준 트릭이 사용됩니다.

다음 코드를 고려하십시오.

enum
{
    plain = 0,
    bold = 1,
    italic = 2
};

void PrintString(const char* message, int size, int style)
{
}

#define PRINT_STRING_1_ARGS(message)              PrintString(message, 0, 0)
#define PRINT_STRING_2_ARGS(message, size)        PrintString(message, size, 0)
#define PRINT_STRING_3_ARGS(message, size, style) PrintString(message, size, style)

#define GET_4TH_ARG(arg1, arg2, arg3, arg4, ...) arg4
#define PRINT_STRING_MACRO_CHOOSER(...) \
    GET_4TH_ARG(__VA_ARGS__, PRINT_STRING_3_ARGS, \
                PRINT_STRING_2_ARGS, PRINT_STRING_1_ARGS, )

#define PRINT_STRING(...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)

int main(int argc, char * const argv[])
{
    PRINT_STRING("Hello, World!");
    PRINT_STRING("Hello, World!", 18);
    PRINT_STRING("Hello, World!", 18, bold);

    return 0;
}
로그인 후 복사

이 접근 방식은 호출자의 매크로 호출을 단순화하는 반면 매크로 작성자에게는 복잡성을 초래할 가능성이 있습니다.

위 내용은 선택적 매크로 매개변수를 C에서 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿