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);
posted @   悟透  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2021-04-10 Shell编程错误 – syntax error near unexpected token `then'
点击右上角即可分享
微信分享提示