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

C 매크로에서 선택적 매개변수를 어떻게 구현할 수 있으며 이 접근 방식의 제한 사항은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-14 15:14:02
원래의
376명이 탐색했습니다.

How can you implement optional parameters in C   macros, and what are the limitations of this approach?

C에서 매크로를 사용하는 선택적 매개변수

C에서 매크로는 코드 재사용 및 추상화를 위한 강력한 도구가 될 수 있습니다. 그러나 전통적인 객체 지향 프로그래밍 언어에서 볼 수 있는 유연성도 일부 부족합니다. 그러한 기능 중 하나는 매크로에서 선택적 매개변수를 정의하는 기능입니다.

선택적 매개변수 정의

매크로에서 선택적 매개변수를 정의하려면 인수 목록과 전처리기 트릭을 조합하여 사용할 수 있습니다. 일반적인 접근 방식 중 하나는 매크로 내의 매크로를 사용하여 오버로드 기능을 제공하는 것입니다. 예:

#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)
로그인 후 복사

여기에는 세 개의 매크로(PRINT_STRING_1_ARGS, PRINT_STRING_2_ARGS 및 PRINT_STRING_3_ARGS)가 정의되어 있으며 각각 다른 수의 매개변수가 있습니다. 전달된 매개변수 수에 따라 올바른 매크로를 선택하기 위해 전처리기 트릭이 사용됩니다.

#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__)
로그인 후 복사

GET_4TH_ARG 매크로는 가변 인수 목록(__VA_ARGS__)에서 네 번째 인수를 추출합니다.

사용법

선택적 매개변수 메커니즘을 사용하려면 다음과 같이 PRINT_STRING 매크로를 호출할 수 있습니다.

PRINT_STRING("Hello, World!"); // Call with 1 argument
PRINT_STRING("Hello, World!", 18); // Call with 2 arguments
PRINT_STRING("Hello, World!", 18, bold); // Call with 3 arguments
로그인 후 복사

제한 사항

이 접근 방식은 객체 지향 언어의 실제 오버로딩에 비해 몇 가지 제한 사항이 있다는 점에 유의하는 것이 중요합니다.

  • 인수 순서는 고정되어 있습니다. 선택적 매개 변수의 순서는 변경할 수 없습니다. .
  • 인수 유형에 따라 오버로드할 수 없습니다. 매크로는 인수 유형이 아닌 인수 개수에 따라 오버로드됩니다.
  • 여러 선택적 매개 변수를 사용하기 어렵습니다. . 선택적 매개변수의 수가 많아지면 매크로 정의가 복잡해지고 유지 관리가 어려워질 수 있습니다.

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

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