带有 gcc 编译器的 UDP recvfrom 警告
UDP recvfrom warning with gcc compiler
我在编译 client - server UDP socket
模拟时收到以下 warning
:
warning: passing 'int *' to parameter of type 'socklen_t *' (aka
'unsigned int *')
converts between pointers to integer types with different sign [-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 社区。
- 为什么会出现此警告?
- 我怎样才能摆脱它?
it wants me to use socklen_t *
正确。
Why is this warning occuring?
因为您没有使用 socklen_t
。
How can I get rid of it?
将 slen
声明为 socklen_t
。
Why is this warning occuring?
出现警告是因为 socklen_t
是无符号类型,而 int
是有符号类型(如诊断所述)。因此,原则上,指向的值可能被 recvfrom()
解释为不同于调用者的解释。实际上,只要使用地址长度 struct
的正确值,GCC 编译的代码就不会发生这种差异,但 GCC 无法在编译时检查。
How can I get rid of it?
传递正确类型的参数。
我在编译 client - server UDP socket
模拟时收到以下 warning
:
warning: passing 'int *' to parameter of type 'socklen_t *' (aka 'unsigned int *') converts between pointers to integer types with different sign [-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 社区。
- 为什么会出现此警告?
- 我怎样才能摆脱它?
it wants me to use
socklen_t *
正确。
Why is this warning occuring?
因为您没有使用 socklen_t
。
How can I get rid of it?
将 slen
声明为 socklen_t
。
Why is this warning occuring?
出现警告是因为 socklen_t
是无符号类型,而 int
是有符号类型(如诊断所述)。因此,原则上,指向的值可能被 recvfrom()
解释为不同于调用者的解释。实际上,只要使用地址长度 struct
的正确值,GCC 编译的代码就不会发生这种差异,但 GCC 无法在编译时检查。
How can I get rid of it?
传递正确类型的参数。