변수 인수 목록이 있는 함수에 변수 인수 전달
유사한 변수 인수를 가진 두 함수를 고려해 보세요.
void example(int a, int b, ...); void exampleB(int b, ...);
example이 exampleB를 호출하지만 exampleB(다른 곳에서 사용됨)를 수정하지 않고 호출한다고 가정합니다. example에서 exampleB로 변수 인수를 어떻게 전달할 수 있나요?
해결책:
인수를 직접 전달하는 것은 불가능합니다. 대신 va_list를 취하는 래퍼 함수를 만듭니다:
#include <stdarg.h> static void exampleV(int b, va_list args);
수정된 함수 exampleA:
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); }
수정되지 않은 함수 exampleB:
void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); }
래퍼 함수 exampleV:
static void exampleV(int b, va_list args) { // Whatever `exampleB` was intended to do... // Except it doesn't call either `va_start` or `va_end`. }
이 접근 방식을 사용하면 exampleB를 수정하지 않고도 exampleB에서 변수 인수를 전달할 수 있습니다. 래퍼 함수 exampleV는 va_start 또는 va_end를 호출하지 않으므로 exampleB의 기존 사용법과의 일관성이 보장됩니다.
위 내용은 수신 함수를 수정하지 않고 한 함수에서 다른 함수로 변수 인수를 전달할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!