두 포인터 배열을 비교하여 함수가 같은지 확인하려고합니다. 나는 즉 관계없이 포인터가 가리키는 파일의 포인터의 배열 기능을 사용하고 싶습니다 - 내가이 작성한 자체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 **’
을
컴파일러가 내 단위 테스트에서 사용중인 유형이 함수 프로토 타입과 일치하지 않는다고 불평하는 경우
하지만 실제로는 기본 유형에만 관심이 없습니다. 내가해야 :
- A) 단지)) 컴파일러가 경고를
- C를 발행하지 만드는 방식으로 기능을 다시 들어오는 포인터의 일부 캐스트
- 라 할) 경고를
- B를 무시 C가 기본 유형을 모르는 아이디어를 좋아하지 않고 받아 들일 수있는 포인터 유형마다 함수를 다시 작성하십시오.
+1 : 다음은 표준을 인용 한 또 다른 관련 답변으로 [link] (http://stackoverflow.com/a/1241314/1336150)입니다. –
ok 내 생각에 모든 포인터가 같은 크기 여야합니다.이 경우에는 포인터를 비교하는 일반적인 함수가 불가능하다는 것을 알 수 있습니까? – bph
@Hiett 매크로로 쓸 수 있습니다. –