错误一: 实参类型不兼容
这是Linux 下编写的 UDP 方式通信的服务器端代码:
int ret_rec = recvfrom(soc_fd, // 上面定义的 UDP 套接字 msg, // 接收数据缓存区 128, // 接收数据缓冲区,大小 0, // 和发送端一样的标记 from_addr, // 对方网络地址 &addrlen);
上面这段代码编译报错:
图版本:
文字版本:
1 [root@CentOs7 06-wangluobiancheng]# gcc 06-04-01.UDP-server.c -o server.out 2 06-04-01.UDP-server.c: 在函数‘main’中: 3 06-04-01.UDP-server.c:69:12: 错误:‘recvfrom’的第 5 个实参类型不兼容 4 &addrlen); 5 ^ 6 In file included from 06-04-01.UDP-server.c:14:0: 7 /usr/include/sys/socket.h:175:16: 附注:需要类型‘struct sockaddr * __restrict__’,但实参的类型为‘struct sockaddr_in’ 8 extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n, 9 ^ 10 [root@CentOs7 06-wangluobiancheng]#
分析:
recvfrom 函数有6个参数,提示说第5个参数有问题, 但显示的是第6个参数,所以这里是 gcc 的一个坑,要注意。
要看看前后上下文,是否有问题。
解决方法:
from_addr 改成 (struct sockaddr *)&from_addr 即可。
---------------------------------------------------------------------------------------
错误二: 内建函数‘calloc’不兼容
图片版:
文字版:
1 [root@CentOs7 06-wangluobiancheng]# gcc 06-04-01.UDP-server.c -o server.out 2 06-04-01.UDP-server.c: 在函数‘main’中: 3 06-04-01.UDP-server.c:62:14: 警告:隐式声明与内建函数‘calloc’不兼容 [默认启用] 4 char *msg = calloc(128,1); 5 ^ 6 [root@CentOs7 06-wangluobiancheng]#
分析:
不兼容提示,大部分是没有 “头文件”,即便不管错误,运行时候也会提示 “段错误”。
解决方法:
增加头文件,如果不知道函数头文件是什么, 用 man calloc 的方式,查看 man 手册。
---------------------------------------------------------------------------------------
-
int ret_rec = recvfrom(soc_fd, // 上面定义的 UDP 套接字 msg,// 接收数据缓存区 128,// 接收数据缓冲区,大小 0,//和发送端一样的标记 (struct sockaddr *)&from_addr, // 对方网络地址 &addrlen); 标签:__,GCC,01,06,04,UDP,server,编译,C语言 From: https://www.cnblogs.com/wutou/p/17301846.html