如何修复 gcc (Debian 4.9.2-10) 4.9.2 编译器警告
warning: conversion to ‘size_t’ from ‘ssize_t’ may change the sign of the result [-Wsign-conversion] recv_len = recvfrom(my_socket, *buf, MESSAGE_MAX_LEN, 0, (struct sockaddr *)&remote_addr, &addr_len);
代码:
int my_socket;
struct sockaddr_storage remote_addr;
socklen_t addr_len = sizeof(remote_addr);
void
socket_listen(
int (*callback )(),
char ** buf)
{
size_t recv_len;
...
*buf = malloc(MESSAGE_MAX_LEN);
recv_len = recvfrom(my_socket, *buf, MESSAGE_MAX_LEN, 0, (struct sockaddr *)&remote_addr, &addr_len);
...
}
最佳答案
显而易见的解决方法:当然是使用正确的类型:
const ssize_t recv_len = recvfrom(...);
它已签名,因为它需要能够返回负值 (-1) 以指示错误,请参阅 the manual page :
These calls return the number of bytes received, or -1 if an error occurred. The return value will be 0 when the peer has performed an orderly shutdown.
关于c - 从 : warning: conversion to ‘size_t’ from ‘ssize_t’ may change the sign of the result 接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410454/