가변인자를 넘겨받아 다시 가변인자를 넘겨받는 함수로 포워딩 시킬수 있는 문제에 대해 여전히 고민중에 있던 도중, 해당 소스를 전부 C++로 포팅을 해볼까 하는 고민이 있었지만, C언어의 함수 선언 형태와 C++의 함수 선언형태의 많은 차이점(?)으로 인해 포팅을 보류하고 있는중이다. 양이 많기도 하고... --;;
C언어 가변인자의 처리 방법 : http://dolba.net/tt/k2club/entry/Variable-Argument-And-Printf-Wrapping-Function
C 프로그래밍(C가 아닌 다른 프로그램에서도 유효한 이야기임)을 하다보면, 하나의 함수에서 인자의 갯수만 각각 다른 형태의 함수를 필요로 하는 경우가 있다.
이런 경우 함수의 파라미터만 달리해서 해당 함수를 구현하는데, 이를 Function Overloading
아래와 같은 형태를 원했지만, C언어에서 아래와 같은 형태는 구현이 안되는것 같다. (방법이 있다면 제보를 ㅠㅠ)
자료를 찾아본 결과 아래의 형태는 가변인자를 이용하여 구현한 방법이라고 한다.
#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
#include <fcntl.h>
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
아무튼 비슷하게나마 Overloading
#include <stdio.h>
void func(); <- ※ 함수 파라미터를 명시하지 않았다.
int main(void)
{
func(1);
func(17, 5);
return 0;
}
void func(int a, int b)
{
if(a == 1)
puts("하나의 파라미터만 넘겨받았음.");
else
printf("두개의 파라미터의 합은 : a = %d, b = %d\n", a, b);
}
함수 오버라이딩을 설명하기 위한 예이므로 func라는 함수는 인자를 두개까지 받아서 처리할 수 있도록 구성하여 보았다.
최대 2개의 파라미터를 넘겨받아 처리할 수 있는 이 함수는 첫번째 인자가 1인 경우 지정한 문자를 출력하고, 그렇지 않은경우 넘겨받은 2개의 파라미터의 함을 출력해주고 있다.
void func(); <- ※ 함수 파라미터를 명시하지 않았다.
int main(void)
{
func(1);
func(17, 5);
return 0;
}
void func(int a, int b)
{
if(a == 1)
puts("하나의 파라미터만 넘겨받았음.");
else
printf("두개의 파라미터의 합은 : a = %d, b = %d\n", a, b);
}
함수 오버라이딩을 설명하기 위한 예이므로 func라는 함수는 인자를 두개까지 받아서 처리할 수 있도록 구성하여 보았다.
최대 2개의 파라미터를 넘겨받아 처리할 수 있는 이 함수는 첫번째 인자가 1인 경우 지정한 문자를 출력하고, 그렇지 않은경우 넘겨받은 2개의 파라미터의 함을 출력해주고 있다.
※ 겐도 님께서 제가 오버라이딩이라고 본문에서 잘못 설명하였던 내용을 지적해주셔서 수정합니다.
오버라이딩은 상속의 개념인데, 잠시 제가 늦더위를 먹은것 같습니다. -_-;