0

warning在编译我的client - server UDP socket模拟时收到以下信息:

警告:将'int *'传递给'socklen_t *'(又名'unsigned int *')类型的参数会在指向具有不同符号的整数类型的指针之间转换[-Wpointer-sign]

这是相关的代码:

#define BUFLEN 2048
struct sockaddr_in myaddr, remaddr;
int fd, recvlen, slen=sizeof(remaddr);
...
char response[BUFLEN];
recvlen = recvfrom(fd, response, BUFLEN - 1, 0, (struct sockaddr *)&remaddr, &slen);

我一直在参考罗格斯大学的教程。我对为什么会出现这个警告有一个很好的想法(它希望我使用socklen_t *),但我想问一下 SO 社区。

  1. 为什么会出现此警告?
  2. 我怎样才能摆脱它?
4

2 回答 2

1

它要我使用socklen_t *

正确的。

为什么会出现此警告?

因为你没有使用socklen_t.

我怎样才能摆脱它?

声明slensocklen_t

于 2015-04-17T02:21:03.007 回答
1

为什么会出现此警告?

发生警告是因为socklen_t它是无符号类型,并且int是有符号类型(如诊断所示)。因此,原则上,指向值的解释可能recvfrom()与调用者不同。实际上,只要只使用正确的地址长度值,GCC 编译的代码就不会发生这种差异struct,但 GCC 无法在编译时检查这一点。

我怎样才能摆脱它?

传递正确类型的参数。

于 2015-04-17T02:22:27.560 回答