问题描述:
在做一些小练习的时候经常会遇到如下方面的警告提示:
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
。