함수 정의에 대한 질문(파라미터의 점 세 개)
함수 정의를 발견했습니다.
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
'programing' 카테고리의 다른 글
Vuex 상태 변경 내용이 Vue 구성 요소 템플릿에 전파되지 않음 (0) | 2022.08.03 |
---|---|
Google Guava vs.아파치 커먼즈 (0) | 2022.08.01 |
Nuxt / Vuex / Vue 반응성 문제 증가 (0) | 2022.08.01 |
여러 Vue 인스턴스에 여러 Vue 모듈 인스턴스 필요 (0) | 2022.08.01 |
off_t 타입의 완전한 정의는 어디서 찾을 수 있습니까? (0) | 2022.08.01 |