C语言GCC编译错误(收集)
错误一: 实参类型不兼容
这是Linux 下编写的 UDP 方式通信的服务器端代码:
1 2 3 4 5 6 | 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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2021-04-10 Shell编程错误 – syntax error near unexpected token `then'