IanMK2 Blog


printf

어떤 언어로 공부를 시작하던지 가장 먼저 배우는 것은 바로 화면에 Hello World를 띄우는 것입니다.
C를 시작할때 가장 먼저 배우는 함수인 printf함수.

int printf( const char *format [, argument]... );
이게 바로 printf의 원형이죠.
const char *format에는 문자열을,  두번째인자에는 출력하고 싶은 변수들을 지정해주죠.

c를 배우던 중 가끔씩 생각했습니다. 
"printf인자안에 있는 ... 를 이용하면 편할 것같은데.." 라고 말이죠.
이걸 언제나 생각만 했지 실제로 찾아본적은 없었습니다.
그러다 얼마전 ... 이것을 Ellipsis notation이라고 부른다는 것을 알게 되었고 써먹는 방법을 찾게 되었습니다.

생각보다 간단하더군요.

int sum(int nCnt, ...)
{
int i = 0;
int s = 0;
for( i = 0; i<nCnt ; i++)
s += (&nCnt)[i+1];
return s;

}
int main()
{
int s = sum(5,1,3,4,2,5);
printf("%d",s);

return 0;
}

위와 같이 프로그램 소스가 있다고 하죠.
sum함수의 인자를 보면 첫번째는 더할 수의 갯수를 두번째는 Ellipsis notation이 들어간걸 볼 수 있습니다.
도대체 인자가 ... 인데 어떻게 여기에 들어가는 변수에 접근할까 라는 생각을 했었는데
답은 포인터였내요.

다시 sum함수를 보면 for문안에서 nCnt의 주소에서 포인터에 +i만큼 더하여 ... 인자에 접근을 하는 것을 볼 수 있습니다.
따라서 당연히 첫번째 인자는 고정된인자가 필요하게 되죠.
인자를 ...만 넣게되면 상큼한 에러를 보게됩니다.


Posted by IanMK2