如何修复gcc(Debian 4.9.2-10)4.9.2编译器警告
警告:从'ssize_t'转换为'size_t'可能会改变结果的符号[-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);
...
}
Run Code Online (Sandbox Code Playgroud)
显而易见的解决方法:使用正确的类型,当然:
const ssize_t recv_len = recvfrom(...);
Run Code Online (Sandbox Code Playgroud)
它已签名,因为它需要能够返回负值(-1)以指示错误,请参见手册页:
这些调用返回接收的字节数,如果发生错误则返回-1.当对等体执行有序关闭时,返回值将为0.