>백엔드 개발 >C++ >가변 인수 목록을 사용하여 C 함수 간에 가변 인수를 전달하는 방법은 무엇입니까?

가변 인수 목록을 사용하여 C 함수 간에 가변 인수를 전달하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-12 12:32:13399검색

How to Pass Variable Arguments Between C Functions with Variable Argument Lists?

변수 인수 목록이 있는 함수 간에 변수 인수를 전달하는 방법

문제:

두 개의 함수가 있습니다. 예( ) 및 exampleB()(유사한 변수 인수 사용) 목록:

void example(int a, int b, ...);
void exampleB(int b, ...);

다른 곳에서 사용되므로 exampleB()의 가변 인수 목록을 수정하지 않고 exampleB() 내에서 example()을 호출해야 합니다.

해결책:

안타깝게도 C에는 변수 인수를 전달하는 직접적인 방법이 없습니다. 이를 위해서는 도우미를 정의해야 합니다. va_list 매개변수를 취하는 함수입니다. 예는 다음과 같습니다.

#include <stdarg.h>

static void exampleV(int b, va_list args);

void exampleA(int a, int b, ...)    // Renamed for consistency
{
    va_list args;
    do_something(a);                // Use argument a somehow
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}

void exampleB(int b, ...)
{
    va_list args;
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}

static void exampleV(int b, va_list args)
{
    ...whatever you planned to have exampleB do...
    ...except it calls neither va_start nor va_end...
}

이 설정에서:

  • exampleV()는 va_list 인수를 취하는 도우미 함수입니다.
  • do_something(a)는 exampleA() 내에서 a 인수를 사용하는 예입니다.
  • exampleV()는 두 가지 모두에서 호출됩니다. exampleA() 및 exampleB()와 해당 변수 인수 목록.
  • exampleV()는 원래 exampleB()용으로 의도된 작업을 수행하지만 va_start() 또는 va_end()를 호출하지 않습니다.

exampleV()를 중개자로 추가하면 원래 구현을 수정하지 않고도 가변 인수를 exampleB()에 전달할 수 있습니다.

위 내용은 가변 인수 목록을 사용하여 C 함수 간에 가변 인수를 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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