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

来源:互联网 发布:库里总决赛数据 编辑:程序博客网 时间:2024/05/29 13:21

问题描述:

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

parameter.c:24: warning: conflicting types for ‘paratest’parameter.c:18: note: previous implicit declaration of ‘paratest’ was hereparameter.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 hereparameter.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

0 0
原创粉丝点击