首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在编译过程中,gcc错误的“类型冲突”和“以前的声明”

在编译过程中,gcc错误的“类型冲突”和“以前的声明”
EN

Stack Overflow用户
提问于 2019-06-05 03:22:05
回答 1查看 242关注 0票数 0

尽管在main()之前声明了"getline“和"copy”函数原型,但我还是收到了这些错误。这个程序直接来自C编程语言的代码,所以我不确定问题是什么以及如何修复它。

代码语言:javascript
复制
#include <stdio.h>

int getline(char line[], int maxline);
void copy(char to[], char from[]);

int main()
{

}

int getline(char s[], int lim)
{
    int c, i;

    for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}

void copy(char to[], char from[])
{
    int i;

    i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}

编译器产生的确切错误是:

代码语言:javascript
复制
string_reverser.c:4:5: error: conflicting types for 'getline'
 int getline(char line[], int maxline);
     ^~~~~~~

In file included from string_reverser.c:1:0:
c:\mingw\include\stdio.h:650:1: note: previous declaration of 'getline' was here
 getline (char ** __restrict__, size_t * __restrict__, FILE * __restrict__);
 ^~~~~~~

string_reverser.c:27:5: error: conflicting types for 'getline'
 int getline(char s[], int lim)
     ^~~~~~~

In file included from string_reverser.c:1:0:
c:\mingw\include\stdio.h:650:1: note: previous declaration of 'getline' was here
 getline (char ** __restrict__, size_t * __restrict__, FILE * __restrict__);
 ^~~~~~~
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 03:32:32

POSIX函数getline()现在是一个标准库函数,它(已经)在<stdio.h>中声明(但在编写K&R时还不是标准的)。因此,您不能在C语言中以稍微不同的方式重新声明函数。一种变通方法是将getline函数重命名为其他名称,例如getline_new使用此变通方法更新后的代码如下所示,或者您可能希望切换到C++,这样可以灵活地使用多个具有相同名称但参数不同的函数,包括参数类型(多态性概念)

代码语言:javascript
复制
    #include <stdio.h>

    int getline_new(char line[], int maxline);
    void copy(char to[], char from[]);

    int main()
    {

    }

    int getline_new(char s[], int lim)
    {
       int c, i;

       for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
        s[i] = c;
       if (c == '\n') {
        s[i] = c;
        ++i;
     }
     s[i] = '\0';
     return i;
    }

   void copy(char to[], char from[])
   {
    int i;

    i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
   }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56450106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档