1

我在 Solaris 中编译了一个 C 程序并收到此警告。

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; 
};

我在我的代码中包含了 socket.h。但我仍然收到此错误。

4

2 回答 2

0

宏可能CMSG_FIRSTHDR没有进行正确的类型转换,所以你必须自己做:

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

也可能是宏本身内部存在一些不正确的转换,在这种情况下,您无能为力,因为它位于系统头文件中。

于 2012-06-12T09:24:14.790 回答
-1

请检查 SOL_SOCKET 是什么类型。它需要是整数。如果不匹配,请更改结构中提交的“cmsg_level”的类型。

我猜 SOL_SOCKET 是一个指针,可能是 int*

于 2012-06-12T08:35:31.657 回答