두 가지 다른 것들의 체크섬을 취하는 함수를 작성하고 있습니다 : 하나, 파일; 두 개는 아카이브 항목 la BSD libarchive 라이브러리입니다. GNU의 coreutils에서 체크섬 코드를 빌 렸습니다.C : 코드 중복 예제
는 파일에 체크섬을 수행하는 내 코드는 다음과 같은 소스에서 읽어을 : 아카이브 항목에서 읽어 내 코드에서
unsigned char buf[BUFLEN];
size_t bytes_read;
FILE *fp;
...
while ((bytes_read = fread (buf, 1, BUFLEN, fp)) > 0) { ... }
는, 해당 코드는
struct archive *ar;
unsigned char buf[BUFLEN];
ssize_t bytes_read;
...
while ((bytes_read = archive_read_data(ar, buf, sizeof(buf))) > 0) { ... }
으로 보이는 대부분의 코드가 같더라도 두 가지 다른 기능을 사용해야합니다. fread와 archive_read_data는 같은 수의 인수조차 갖고 있지 않기 때문에 함수 포인터를 전달하는 방법을 잘 모르겠습니다. (나는 fread (3) 대신에 read (2)를 사용하는 것으로 시작할 수 있다고 생각합니다. 그러나 그 방법은 진행하기위한 생산적인 방법이라고는 확신하지 못합니다.) 여기에 코드 중복을 피할 수있는 좋은 방법이 있습니까? 함수 포인터를 사용하여 작업하는 것 외에도 동일한 코드 조각을 별도의 파일에 넣은 다음 #including
을 입력하여 수행 할 수 있지만보기에는 좋지 않습니다.
이 특정 예에서 함수에 대한 코드는 그렇게 길지 않으므로 코드를 복제하면 큰 문제가되지 않습니다. 우아한 솔루션이 있는지 궁금합니다.