【发布时间】:2012-04-10 20:37:21
【问题描述】:
我正在编写对两个不同事物进行校验和的函数:一个是文件;另一个是文件。第二,BSD libarchive 库的归档条目a la。我从 GNU 的 coreutils 中借用了校验和代码。
我对文件进行校验和的代码从其源读取,如下所示:
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 甚至没有相同数量的参数。 (我想我可以从使用 read(2) 而不是 fread(3) 开始,但我不确定这是一种有效的方式。)
这里有避免代码重复的好方法吗?除了尝试用函数指针来做之外,我可以通过将相同的代码片段放在单独的文件中来做到这一点,然后
#including'ing 他们,但这看起来很难看。
在这个特定的示例中,函数的代码并没有那么长,所以继续复制代码并不是什么大问题。我只是想知道是否存在优雅的解决方案。
【问题讨论】:
标签: c function-pointers code-duplication