가변인자 함수에 대한 이해


printf함수와 scanf함수의 사용 방법을 생각해 보면

첫 번째 전달인자인 문자열에 존재하는 서식문자의 수만큼 전달인자의 수도 증가한다.

printf, scanf 함수는 전달인자의 수가 제한되어 있지 않다는 특징이 있다.

num = Sum(4, 1, 2, 3, 4);                1, 2, 3, 4의 합

Sum과 같은 형태의 호출이 가능한 함수를 가변인자 함수라 한다. 이 함수의 모든 헤더파일은 stdarg.h에 선언되어 있다. 



가변인자 매개변수의 선언방법


main.c



전달된 인자들 추출해내는 방법

1단계 : 가변인자를 가리킬 수 있는 참조자를 선언한다.

2단계 : 참조자가 가변인자를 실제로 참조할 수 있도록 한다.

3단계 : 참조자를 통해 전달된 정보를 추출한다.

4단계 : 참조자가 더 이상 가변인자를 가리키지 않도록 해제한다.

1단계 : va_list

2단계 : va_start

3단계 : va_arg

4단계 : va_end



main1.c




연결리스트 : 도서관리


제목 - char[31]            |    caTitle

가격 - unsigned int       |    uiPrice

저자 - char                  |    caAuthor   

분류 - char                  |    caType

LinkedList.c

LinkedList.h

main.c


ListList.h에서는 Book구조체를 typedef형으로 선언 및 정의하고 있다.

LinkedList.c에서 Book_Stdin함수로 책 제목, 가격, 저자, 장르 등을 입력받고,

Book_Stdout으로 구조체 Book의 주소를 가지는 std가 가리키는 각각의 제목, 가격, 저자, 장르를

출력해낸다.

main.c에서 Book의 주소를 가지는 head에 Book 크기의 동적할당을 받고

Book_Stdin함수를 호출하여 인자로 head를 넘기고, Book_Stdout도 같이 호출하여 전과 동일하게 head를 인자로 넘겨준다.