2012-06-12 61 views
1

我在Solaris中編譯C程序並得到此警告。警告:不正確的指針/整數組合:op「=」

line 68: warning: improper pointer/integer combination: op "=" 

我的代碼包含

struct cmsghdr *cmsg; 

68行是

cmsg = CMSG_FIRSTHDR(&msg); 

結構的cmsghdr和CMSG_FIRSTHDR在socket.h中定義爲

#define CMSG_FIRSTHDR(m) 
-- 
-- 

struct cmsghdr { 
     socklen_t  cmsg_len; 
     int    cmsg_level; 
     int    cmsg_type; 
}; 

我已經包括插座.h在我的代碼中。但是我仍然得到這個錯誤。

+0

你能檢查'SOL_SOCKET'是否是一個指針,也許? – Shahbaz

+0

線68是「CMSG = CMSG_FIRSTHDR(&msg);」 – Tinyspark

+0

那麼你需要告訴我們CMSG_FIRSTHDR宏觀樣子 –

回答

-1

請檢查SOL_SOCKET是什麼類型。它需要是int。 如果不匹配,請更改結構中字段「cmsg_level」的類型。

我猜SOL_SOCKET是一個指針,也許INT *

+0

in socket .h,SOL_SOCKET被定義爲「#define SOL_SOCKET 0xffff/*套接字級選項* /」 – Tinyspark

+0

你得到的警告通常意味着你沒有正確包含每個必要的頭文件,我沒有任何其他想法 - 對不起 –

+0

就像我分析的一樣,「cmsghdr」僅在socket.h中定義,並且它不存在於任何其他頭部呃文件。 – Tinyspark

0

這是可能的CMSG_FIRSTHDR宏不進行正確的類型轉換,所以你必須做你自己:

cmsg = (struct msghdr *) (CMSG_FIRSTHDR(&msg)); 

那也說不定因爲在宏本身內部有一些不適當的投射,在這種情況下,你無法做任何事情,因爲它在系統標題中。