> 백엔드 개발 > C++ > C Variadic 매크로의 인수 수를 어떻게 확인할 수 있나요?

C Variadic 매크로의 인수 수를 어떻게 확인할 수 있나요?

Linda Hamilton
풀어 주다: 2024-12-25 14:48:14
원래의
229명이 탐색했습니다.

How Can I Determine the Number of Arguments in a C   Variadic Macro?

C 전처리기의 VA_ARGS

C의 가변 매크로를 사용하여 가변 매크로의 인수 수 결정 임의의 수의 인수. 그러나 가변 매크로에 전달되는 인수 수를 결정하는 것은 어려울 수 있습니다. 이 기사에서는 VA_ARGS 전처리기 매크로를 사용하여 간단하고 효율적인 솔루션을 살펴봅니다.

VA_ARGS

VA_ARGS 이해 은 실제 인수로 확장되는 내장 전처리기 매크로입니다. 가변 매크로로 전달되었습니다. 그러나 인수 개수에 대한 정보는 제공하지 않습니다.

정수 배열 크기를 사용하여 인수 계산

가변 매크로의 인수 개수를 확인하려면 C 전처리기에서 배열 크기의 동작을 활용할 수 있습니다. 다음 매크로 NUMARGS()는 이 기술을 사용합니다.

#define NUMARGS(...) (sizeof((int[]){__VA_ARGS__})/sizeof(int))
로그인 후 복사

이 매크로는 전달된 모든 인수를 포함하는 배열의 크기를 정수 크기로 나눈 값으로 확장합니다. 결과 값은 인수의 개수입니다.

사용 예

인수의 합을 계산하는 다음 매크로 SUM()을 고려하세요.

#define SUM(...) (sum(NUMARGS(__VA_ARGS__), __VA_ARGS__))
로그인 후 복사

SUM()을 사용하려면 다음과 같이 가변 개수의 인수를 사용하여 호출합니다. 그래서:

SUM(1);
SUM(1, 2);
SUM(1, 2, 3);
로그인 후 복사

NUMARGS() 매크로는 인수 수를 계산하고 이를 인수와 함께 sum() 함수에 전달합니다.

빈 인수 목록 처리

기본적으로 NUMARGS() 매크로는 빈 인수 목록으로 호출하면 실패합니다. 이 문제를 해결하기 위해 GNU C 확장을 사용하여 매크로 변형을 정의할 수 있습니다.

#define NUMARGS(...) (sizeof((int[]){0, ##__VA_ARGS__})/sizeof(int)-1)
로그인 후 복사

이 변형은 빈 인수 목록을 허용하고 모든 경우에 인수 수를 올바르게 계산합니다.

결론

VA_ARGS 전처리기 매크로는 다음과 같습니다. 가변 매크로의 인수 수를 효율적으로 계산하는 데 활용됩니다. 이 기술을 정수 배열 크기 조작과 결합함으로써 C에서 가변 개수의 인수를 처리하는 데 유용한 매크로를 개발할 수 있습니다.

위 내용은 C Variadic 매크로의 인수 수를 어떻게 확인할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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