GCC ошибки "конфликтующие типы для" и "предыдущее объявление" во время компиляции - PullRequest
0 голосов
/ 04 июня 2019

Я получаю эти ошибки, несмотря на объявление прототипов функций getline и copy перед main (). Эта программа идет прямо из кода на языке программирования C , поэтому я не уверен, что это за проблема и как ее исправить.

#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;
}

Точные ошибки, выданные компилятором:

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__);
 ^~~~~~~

1 Ответ

3 голосов
/ 04 июня 2019

Функция POSIX getline() теперь является стандартной библиотечной функцией, которая (уже) объявлена ​​в <stdio.h> (но не была стандартной при написании K & R).Следовательно, вы не можете повторно объявить функцию немного по-другому на языке Си.Обходной путь - переименовать вашу функцию getline во что-то другое, например, getline_new. Обновленный код такой же, как показано ниже, или вы можете переключиться на C ++, который дает гибкость, чтобы иметь много функций с одинаковым именем, но разными аргументами, включая тип аргумента(концепция полиморфизма)

    #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;
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...