> 백엔드 개발 > C++ > 본문

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

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

How Can Optional Macro Parameters Be Implemented in C++?

Optional Macros with C++ Preprocessor

In C++, optional macro parameters can enhance code flexibility. A method for implementing this is through overloading-style macros. Let's explore how this technique works.

One approach utilizes the list of macro arguments twice. Firstly, it constructs the name of a helper macro. Secondly, it passes the arguments to the appropriate helper macro. A standard trick is employed to determine the number of macro arguments.

Consider the following code:

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;
}
로그인 후 복사

This approach simplifies macro invocation for the caller while potentially introducing complexity for the macro writer.

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

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