-1

컴파일 할 때 코드의 조각이 나에게는 컴파일러 경고 메시지

#define SKM_sk_set_cmp_func(type, st,cmp) \ 
     ((int (*)(const type * const *,const type * const *)) \ 
     sk_set_cmp_func(CHECKED_PTR_OF(STACK_OF(type), st), CHECKED_SK_CMP_FUNC(type, cmp))) 

#define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp)) 

static int mrs_X509_cmp_callback(const X509 **a, const X509 **b); 

int foo() 
{ 
     STACK_OF(X509) *certs; 

     (void)sk_X509_set_cmp_func(certs, mrs_X509_cmp_callback); 
} 

In function foo: 
warning: pointer type mismatch in conditional expression 

너희들이 나에게 경고 메시지를 제거하는 방법을 알려 수이 경고를 준다?

+3

어떤 유형인지 알지 못해요? 뚱땡이 기회. –

+0

'sk_X509_set_cmp_func()'의 프로토 타입은 무엇입니까? 'certs'는 어떻게 선언하셨습니까? – sarnold

+1

C++ 및 C와 같은 질문에 태그를 추가하지 마십시오. –

답변

2

실제로 코드에 몇 가지 다른 문제가 있습니다. 첫째, fooint을 반환한다고 가정합니다. 그러나 어떤 유형도 반환하지는 않습니다 ... 적어도 컴파일하지 않으면 컴파일러 경고를 던질 것입니다. 둘째, 지금 당장은 매크로가 sk_set_cmp_func에서 반환 된 함수 포인터의 캐스팅을 시도하고있는 것 같지만 그 함수 포인터를 void 유형으로 캐스팅하려고 시도하는 것처럼 보입니다. 함수 포인터를 반환하기 때문에 이것을 void*으로 캐스팅해야합니다. 그래도 결국에는 캐스트가 foo의 컨텍스트에서 의미가 없으므로이 함수는 int 유형을 반환해야하기 때문에 작성되었습니다.