C 언어 옵션 인수(C 언어 핵심 기술에서 발췌)
13032 단어 C 언어
C 언어에서 가장 유명한 variadi 함수 예는 printf () 와scanf () 이다.이 두 함수는 모두 강제적인 자변수, 즉 형식 문자열을 가지고 있다.포맷 문자열의 변환 수식자는 선택할 수 있는 변수의 종류와 수량을 결정합니다.
모든 강제적인 변수에 대해 말하자면, 함수 헤더는 일반적인 함수 성명과 같이 적당한 매개 변수를 표시할 것이다.매개 변수 목록의 규격은 강제적인 매개 변수가 앞(쉼표로 구분), 뒤에 쉼표와 생략 기호(...)를 따르는 것이다.이 생략 기호는 선택할 수 있는 자변수를 대표한다.
variadic 함수에서 선택적 인수를 액세스하려면 va 형식을 통과해야 합니다list의 대상, 변수 정보를 포함합니다.이런 유형의 대상도'자변수 포인터'(argument pointer)라고도 하는데 이 창고에 최소한 하나의 자변수의 위치를 포함한다.이 변수 포인터를 사용하여 다음 선택 가능한 변수로 이동할 수 있습니다. 그러면 함수는 모든 선택 가능한 변수를 저장할 수 있습니다.va_list 형식이 stdarg에 정의되었습니다.h 헤더 파일에서.
'수량 가변 변수' 를 지원하는 함수를 작성할 때va 를 사용해야 합니다list 형식은 선택할 수 있는 변수를 저장하기 위해 변수 포인터를 정의합니다.다음 토론에서valist 대상은argptr로 명명됩니다.이 자변수 포인터를 네 개의 매크로로 처리할 수 있습니다. 이 매크로들은 stdarg에 정의되어 있습니다.h 헤더 파일:
void va_start(va_list argptr, lastparam);
va_start 매크로는 첫 번째 선택할 수 있는 변수 위치를 사용하여argptr 변수 포인터를 초기화합니다.이 매크로의 두 번째 인수는 "이 함수에 이름이 있는 마지막 매개변수"의 이름이어야 합니다.선택적 인수를 사용하기 전에 이 매크로를 호출해야 합니다.
type va_arg(va_list argptr, type);
va_Arg 매크로는 현재argptr에서 인용하는 선택할 수 있는 변수를 가져오고, Argptr를 다음 변수로 옮깁니다.va_arg 매크로의 두 번째 인수는 방금 읽은 인수의 유형입니다.
void va_end(va_list argptr);
자변수 포인터가 더 이상 필요하지 않을 때va 를 호출해야 합니다end 매크로.다소vastart 또는 vacopy 이전에 사용했던 변수 포인터를 다시 초기화하려면 v 를 먼저 호출해야 합니다end.
void va_copy(valist dest, va_list src);
va_copy 매크로는 현재 src를 사용하여 변수 포인터dest를 초기화합니다.그리고 src에서 인용한 위치에서부터 선택할 수 있는 변수 목록을 dest로 저장할 수 있습니다.
1
#include
<
stdio.h
>
2
#include
<
stdlib.h
>
3
#include
<
stdarg.h
>
4
5
void
myprintf(
const
char
*
fmt, ...)
6
{
7
/*
8
* va_list , .
9
* va_start .
10
* va_arg , .
11
*/
12
va_list ap;
13
va_start(ap, fmt);
14
const
char
*
p;
15
for
( p
=
fmt;
*
p; p
++
) {
16
if
(
*
p
==
'
%
'
) {
17
switch
(
*++
p) {
18
case
'
d
'
:
19
printf(
"
%d
"
, va_arg(ap,
int
));
20
break
;
21
case
'
f
'
:
22
printf(
"
%f
"
, va_arg(ap,
double
));
23
break
;
24
case
'
s
'
:
25
printf(
"
%s
"
, va_arg(ap,
char
*
));
26
break
;
27
default
:
28
break
;
29
}
30
}
else
{
31
putchar(
*
p);
32
}
33
}
34
va_end(ap);
35
}
36
int
main(
int
argc,
char
*
argv[])
37
{
38
myprintf(
"
%s = %d / %f\ = %f
"
,
"
100 / pi
"
,
100
,
3.1415926
,
100
/
3.1415926
);
39
getch();
40
return
0
;
41
}
결과는 다음과 같습니다. 콘솔에서 출력합니다.
100/pi = 100/3.141593 = 31.830989
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.