programing

함수 정의에 대한 질문(파라미터의 점 세 개)

javaba 2022. 8. 1. 23:54
반응형

함수 정의에 대한 질문(파라미터의 점 세 개)

함수 정의를 발견했습니다.

char* abc(char *f, ...)
{
}

점 세 개가 무슨 뜻이죠?

이러한 유형의 함수를 가변 함수(Wikipedia 링크)라고 합니다.이들은 타원(즉, 점 3개)을 사용하여 함수가 처리할 수 있는 변수 수가 있음을 나타냅니다.(아마도 깨닫지 못한 채) 이러한 기능을 사용해 본 적이 있을 것입니다.printf예를 들어 (ISO 표준에서):

int printf(const char * restrict format, ...);

줄임표를 사용하면 매개 변수의 수를 미리 알 수 없는 함수를 만들 수 있습니다.stdargs.h기능(va_start,va_arg그리고.va_end)를 참조해 주세요.

추출한 논쟁의 종류를 알고 언제 끝날지 결정할 수 있는 방법을 알아야 합니다.printf(타입과 카운트 모두) 형식 문자열로 이 작업을 수행하는 반면 아래 예제 코드는 항상 다음과 같이 가정합니다.const char *센티넬 값이 있는 유형으로NULL완료 여부를 결정합니다.

링크에서는 변수 인수 리스트의 사용에 대해 설명합니다.printf.


예를 들어, 다음 프로그램은 다음 함수를 포함합니다.outStrings()임의의 수의 문자열을 인쇄할 수 있습니다.

#include <stdio.h>
#include <stdarg.h>

void outStrings(const char *strFirst, ...) {
    // First argument handled specially.

    printf("%s", strFirst);
    va_list pArg;
    va_start(pArg, strFirst);

    // Just get and process each string until NULL given.

    const char *strNext = va_arg(pArg, const char *);
    while (strNext != NULL) {
        printf("%s", strNext);
        strNext = va_arg(pArg, const char *);
    }

    // Finalise processing.

    va_end(pArg);
}

int main(void) {
    char *name = "paxdiablo";
    outStrings("Hello, ", name, ", I hope you're feeling well today.\n", NULL);
}

Vararg에 대한 위키피디아는 C++에서 기능합니다.

이들은 엘리피스라고 불리며 함수가 파라미터의 수를 무제한으로 취할 수 있음을 의미합니다.함수는 다음과 같이 호출할 수 있습니다.

abc( "foo", 0 );
abc( "foo", "bar", 0 );

리스트의 끝을 나타내는 방법이 필요합니다.이것은 첫 번째 파라미터를 printf(0 형식 문자열)로 사용하거나 위의 예에서 특별한 터미네이터를 사용하여 실행할 수 있습니다.

파라미터에 대해 타입 체크나 사용자 정의 변환을 실행할 수 없기 때문에 파라미터 수가 가변인 함수는 C++에서는 잘못된 형식으로 간주됩니다.

이것은 C에서는 varargs 함수 또는 변수 인수 함수라고 불립니다.

아마 당신이 알아볼 수 있는 것은 printf입니다.

언급URL : https://stackoverflow.com/questions/599744/question-about-a-function-definition-three-dots-in-parameters

반응형