우선 간단하게 예시로 ft_strlen 을 들어보겠습니다.
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#ifndef MY
# define MY 1
#endif
size_t ft_strlen(const char *s)
{
size_t ret;
ret = 0;
while (s[ret] != 0)
ret++;
return (ret + 1);
}
void *get_strlen()
{
if (MY == 1) // my func
{
return (ft_strlen);
}
else // real func
{
return (strlen);
}
}
int main()
{
//get test func
size_t (*test_strlen)(const char *);
test_strlen = get_strlen();
//test 1
const char *testStr1 = "hello mini tester";
printf("strlen >> input : %s | output : %ld\\n", testStr1, test_strlen(testStr1));
}
위와 같이 간단하게 ft_strlen 을 작성하고, 미리 define 된 MY 의 값에 따라 원형함수거나,
자신이 만든 함수의 포인터를 리턴해주는 get_strlen() 을 작성합니다.
그 후에 테스트를 위한 메인을 작성합니다.
혹시나 함수포인터에 대해서 공부하신적이 없으시다면,
https://dojang.io/mod/page/view.php?id=592
위 링크에 아주 잘 설명되어있습니다.
위의 예시는 일부러 원형함수와 다른 출력을 내기 위해서
마지막 return 에서 ret + 1 을 리턴해줬습니다.
이후 Makefile 에 다음과 같이 작성해줍니다.