-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

不知道這些是什麼類型?發胖的機會。 – 2012-03-14 00:47:32

+0

'sk_X509_set_cmp_func()'的原型是什麼?你是怎麼聲明'certs'的? – sarnold 2012-03-14 00:48:47

+1

永遠不要標記C++和C這樣的問題。 – 2012-03-14 00:52:38

回答

2

實際上你的代碼有幾個不同的問題。首先,foo假設返回一個int,但是您沒有返回任何類型......至少會拋出編譯器警告,如果根本不編譯的話。其次,現在看來,你的宏似乎正試圖從sk_set_cmp_func返回一個函數指針的轉換,但是看起來你試圖將該函數指針轉換爲void類型......至少,你應該因爲您正在返回一個函數指針,所以將其轉換爲void*。儘管如此,在編寫foo的上下文中,演員陣容沒有任何意義,因爲該函數應返回int類型。