-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型を返しているはずだからだ。