2
我試圖編寫一個函數來比較兩個指針數組,看看它們是否相同。我想使用函數指針的任何陣列上,即無論指針指向的東西 - 我在自己C指針數組的比較
我寫這個指針的平等只是感興趣:
/**
* 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 **’
與編譯器抱怨說,在我的單元測試我使用的類型不匹配函數原型
但我沒有真正感興趣的底層類型,只有它的指針。我應該:
- 一)只是忽略警告
- B)重寫功能的方式,以使編譯器不會發出警告
- c)採取傳入指針的一些投
- d)接受C不喜歡不知道底層類型的想法,並重新編寫我可能遇到的每種類型的指針的函數
+1:這是[鏈接](http://stackoverflow.com/a/1241314/1336150)引用標準的另一個相關答案。 – 2012-07-10 08:35:31
好吧,所以我認爲所有的指針應該是相同的大小是不正確的,我可以看到在這種情況下,比較指針的通用函數是不可能的? – bph 2012-07-10 08:36:06
@Hiett你可以把它寫成一個宏:) – 2012-07-10 08:36:34