Jest to program z książki "ANSI C Programowanie". Ma on za zadanie odczytać zbiór wierszy i wypisać najdłuższy z nich :
#include <stdio.h>
#define MAXLINE 1000 /* dopuszczalna długość wiersza danych wejściowych */
int getline(char line[], int maxline);
void copy(char to[], char from[]);
/* wypisywanie najdłuższego wiersza danych wejściowych */
main()
{
int len; /* długość bieżącego wiersza */
int max; /* największa znana długość */
char line[MAXLINE]; /* bieżący wiersz wejścia */
char longest[MAXLINE]; /* najdłuższy wiersz */
max = 0;
while ((len = getline(line, MAXLINE)) > 0)
if (len > max)
{
max = len;
copy(longest, line);
}
if (max > 0) /* dane zawierały co najmniej jeden wiersz */
printf("%s", longest);
return 0;
}
/* getline: pobiera wiersz do tablicy s, zwraca długość */
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;
}
/* copy: kopiuje 'from' do 'to', zakłada wystarczający rozmiar */
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
Przy kompilacji wyświetla komunikat :
longestline.c:5:5: error: conflicting types for ‘getline’
int getline(char line[], int maxline);
^
In file included from longestline.c:1:0:
/usr/include/stdio.h:678:20: note: previous declaration of ‘getline’ was here
extern _IO_ssize_t getline (char **__restrict __lineptr,
^
longestline.c:29:5: error: conflicting types for ‘getline’
int getline(char s[], int lim)
^
In file included from longestline.c:1:0:
/usr/include/stdio.h:678:20: note: previous declaration of ‘getline’ was here
extern _IO_ssize_t getline (char **__restrict __lineptr,
^
Po zmianie nazwy funkcji "getline" na np. "getlin" program działa poprawnie. Czy da się to jakoś ominąć stosując nazwę funkcji "getline"?