【问题标题】:C: GCC compiler—conflicting types errorC: GCC 编译器——冲突类型错误
【发布时间】:2014-02-13 20:35:01
【问题描述】:

我正在尝试编译从教科书中逐字复制的程序,但出现以下错误:

maxline.c:4:5: error: conflicting types for ‘getline’ /usr/include/stdio.h:675:20: note: previous declaration of ‘getline’ was here maxline.c:26:5: error: conflicting types for ‘getline’ /usr/include/stdio.h:675:20: note: previous declaration of ‘getline’ was here

以下是有问题的行:

4 int getline(char line[], int maxline);

26 int getline(char s[], int lim)

我错过了什么非常明显的事情吗?

【问题讨论】:

  • 为什么第 4 行和第 26 行的参数使用不同的名称?这并不违法,但很奇怪。
  • 请注意,您没有在stdio.h 中发布声明,这是真正的 冲突点。显然 your decl 和 implementation 都应该相互匹配。警告告诉您 getline() 已声明,并且与 your 代码(原型或定义)不匹配。查看 that decl(在 stdio.h,第 675 行)。
  • 当我将“getline”的名称更改为“getln”时效果很好。非常感谢!

标签: c gcc compiler-errors


【解决方案1】:

getlinestdio.h 中声明。 ISO C 标准没有指定它,但它被指定为扩展,最初由 GNU 和后来的 POSIX 指定。 man getline 了解有关预定义 getline 函数的更多信息,或查看 official POSIX description

您已经用相同的名称声明了自己的函数,这显然与 stdio.h 中的声明冲突,可能看起来像这样(省略 restrict 限定符以节省空间):

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

为您的函数使用不同的名称(get_line 可以工作),或者使用使getlinestdio.h 版本不可见的选项编译您的代码——可能类似于-std=c99 -pedantic

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2019-10-30
    • 2012-08-28
    • 2014-03-10
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多