#include <Turboc.h>
int GetSum(int num, ...) { // 고정인수 다음에, 여러 개의 가변인수가 올 수 있다.
int sum=0;
int i;
va_list ap; // va_list 타입의 포인터 변수이다.
int arg;
va_start(ap,num); // ap가 첫번째 가변 인수를 가리키도록 초기화한다. num은 마지막 고정인수이다.
for (i=0;i<num;i++) {
arg=va_arg(ap,int); //ap 위치에 있는 해당 인수를 읽어주고, ap의 위치를 다음으로 넘긴다.
// va_arg(ap,int)에서 타입이 맞지 않으면 오류가 날 것이다.
sum+=arg;
}
va_end(ap); // 가변인수를 다 읽은 후 뒷정리를 한다.
// 인텔 계열 CPU에서는 아무 일도 하지 않는다. 단, 다른 CPU는 다르므로 호환성을 위해 넣어준다.
return sum;
}
void main()
{
printf("1+2=%d\\n",GetSum(2,1,2));
printf("3+4+5+6=%d\\n",GetSum(4,3,4,5,6));
printf("10~15=%d\\n",GetSum(6,10,11,12,13,14,15));
}
함수가 선언되고 실행되었으나, 실행 시 파라미터를 넘기지 않았을 경우
#include <stdio.h>
int foo(int a)
{
printf("%d",a);
return 0;
}
int main()
{
foo;
return 0;
}
이 경우 함수의 레퍼런스가 포인터를 생성하나 즉시 버려진다. 즉 컴파일 에러는 일어나지 않고, 함수는 실행되지 않는다.