【问题标题】:warning: improper pointer/integer combination: op "="警告:不正确的指针/整数组合:op“=”
【发布时间】:2012-06-12 08:32:38
【问题描述】:

我在 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。但我仍然收到此错误。

【问题讨论】:

  • 你能检查一下SOL_SOCKET 是否是一个指针吗?
  • 第 68 行是“cmsg = CMSG_FIRSTHDR(&msg);”
  • 那么你需要告诉我们 CMSG_FIRSTHDR 宏是什么样子的。
  • msg的声明是什么?
  • 这就是它的声明方式。结构 msghdr 消息; msghdr 也在 socket.h 中定义。

标签: c gcc-warning solaris-10


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 在 socket.h 中,SOL_SOCKET 被定义为“#define SOL_SOCKET 0xffff /* options for socket level */”
    • 您收到的警告通常意味着您没有正确包含每个必要的头文件。我没有任何其他想法 - 抱歉
    • 据我分析,“cmsghdr”仅在 socket.h 中定义,在任何其他头文件中都不存在。
    • 编辑:你确定问题出在那条线吗?
    • 嗨,Tectu,我已经编辑了问题以包含上一行。 “CMSG_FIRSTHDR”也在socket.h中定义
    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    相关资源
    最近更新 更多