linux的c文件报错for,linux c 编译错误 conflicting types for 的解决办法

程序在Windows下运行是OK的,但是放在linux系统gcc编译就会报错。

报错如下:

tongxunlu.c:6:1: error: unknown type name ‘linkman’

linkman *Add(struct linkman *head);

^~~~~~~

tongxunlu.c:6:21: warning: ‘struct linkman’ declared inside parameter list will not be visible outside of this definition or declaration

linkman *Add(struct linkman *head);

^~~~~~~

tongxunlu.c:7:1: error: unknown type name ‘linkman’

linkman *Delete(struct linkman *head);

^~~~~~~

tongxunlu.c:7:24: warning: ‘struct linkman’ declared inside parameter list will not be visible outside of this definition or declaration

linkman *Delete(struct linkman *head);

^~~~~~~

tongxunlu.c:8:1: error: unknown type name ‘linkman’

linkman *Search(struct linkman *head,char name[]);

^~~~~~~

原因及解决方法:

1.函数使用的位置位于声明之前,或未声明函数原型就使用函数;

这种情况往往出现在函数实现文件中,未在头部声明的函数或声明的位置位于函数使用的位置之前;容易忽略的是结构体的定义也需要放在使用位置之前。

2.函数声明的原型中参数或返回类型与函数实现时使用的类型不一致;

在确定调用与实现一致的情况下,将实现部分的函数头拷贝到声明处,即可解决;

3.头文件中的循环引用导致错误;

在a.h中引用了b.h后,又在b.h中引用了a.h,且其中一个头文件中定义了该函数的原型,在编译期对函数原型产生全局化的临时链接变量时,就出现了多个相同 原型声明,导致编译器报错。

#ifndef _A_H_//若a.h未被定义过返回真,否则返回假

#define _A_H_//若上一条语句返回真则重新定义a.h,否则跳过这条语句以及到endif语句之间的语句

//其他定义或声明

// ***

#endif

上述写法,也可按如下方式来书写,即头文件名前后多一个下划线:

#ifndef __A_H__

#define __A_H__

关于#ifndef的详细用法,请参照#ifndef_百度百科

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值