우선 간단하게 예시로 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 에 다음과 같이 작성해줍니다.