C语言GCC编译错误(收集)

错误一: 实参类型不兼容

这是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);
posted @ 2023-04-10 09:46  悟透  阅读(120)  评论(0)    收藏  举报