我正在尝试编写一个函数来比较两个指针数组,看看它们是否相同。我想在任何指针数组上使用该函数,即无论指针指向什么 - 我只是对指针本身的相等性感兴趣
我写了这个:
/**
* Return true if arrays (of type ptr to ptr) are equal
*/
bool ptr_array_eq(const void **x, const void **y, size_t n)
{
size_t i;
for (i=0; i<n; i++) {
if (x[i] != y[i]) {
return false;
}
}
return true;
}
我的单元测试如下所示:
void testPTR_ARRAY_EQ(void)
{
Mode *m1, *m2, *m3, *m4, *m5, *m6;
Mode *a[] = {m1, m2, m3, m4, m5};
Mode *b[] = {m1, m2, m3, m4, m5};
Mode *c[] = {m2, m3, m4, m5, m6};
Mode *d[] = {m1, m3, m4, m5, m6};
CU_ASSERT(ptr_array_eq(a, a, 4));
CU_ASSERT(ptr_array_eq(a, b, 4));
CU_ASSERT(! ptr_array_eq(a, c, 4));
CU_ASSERT(! ptr_array_eq(a, d, 4));
}
但是当我编译时,我收到以下警告(不是错误):
test_utility.c: In function ‘testPTR_ARRAY_EQ’:
test_utility.c:648:5: warning: passing argument 1 of ‘ptr_array_eq’ from incompatible pointer type [enabled by default]
../src/glamdring2.h:327:6: note: expected ‘const void **’ but argument is of type ‘struct Mode **’
编译器抱怨在我的单元测试中我使用的类型与函数原型不匹配
但我对底层类型并不感兴趣,只对指向它的指针感兴趣。我是不是该:
- a) 忽略警告
- b) 以使编译器不发出警告的方式重写函数
- c) 对传入的指针进行一些转换
- d) 接受 C 不喜欢不知道底层类型的想法,并为我可能遇到的每种类型的指针重新编写函数