关于“conflicting types for ***“的问题

问题描述:

在做一些小练习的时候经常会遇到如下方面的警告提示:

parameter.c:24: warning: conflicting types for ‘paratest’
parameter.c:18: note: previous implicit declaration of ‘paratest’ was here
parameter.c:34: warning: conflicting types for ‘paraprintf’
parameter.c:17: note: previous implicit declaration of ‘paraprintf’ was here

或者是这样子:

exercise.1.16.c:4: error: conflicting types for ‘getline’
/usr/include/stdio.h:673: note: previous declaration of ‘getline’ was here

上面这两种问题究其本质,都是由于文件中定义的函数有矛盾。

情况一

当自定义的函数位于main函数之后,如果没有先在main函数之前进行函数声明,则main函数中所调用的自定义函数是默认返回值是int类型的,如果main函数后定义的函数是void类型就会提出警告,如上所示,但是如果不是void类型也不是int类型就会报错。如下则是将两个函数返回值一个定义成char类型,一个定义为void类型:

parameter.c:24: error: conflicting types for ‘paratest’
parameter.c:18: note: previous implicit declaration of ‘paratest’ was here
parameter.c:34: warning: conflicting types for ‘paraprintf’
parameter.c:17: note: previous implicit declaration of ‘paraprintf’ was here

解决办法:

其实很简单,只要在mian函数前先声明好使用的函数就可以了。

情况二

由于文件中自定义了一个函数getline,这个函数在/usr/include/stdio.h:673:已经进行了声明,即文章自定义的函数和头文件中声明的函数有矛盾,就会提示警告。
自己定义的getline函数声明如下:

int getline(char s[]);

stdio.h中的getline函数声明:

 extern _IO_ssize_t getline (char **__restrict __lineptr,
                            size_t *__restrict __n, 
                            FILE *__restrict __stream) __wur);

解决办法

将自己所定义的函数更改下函数名,如getline更换为get_line

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值