2014-02-13 5 views
1

내가 내 교과서에서 그대로 복사 한 프로그램을 컴파일하기 위해 노력하고있어,하지만 난 다음 오류 얻을 : 여기C : GCC 컴파일러 충돌 유형의 오류

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) 

내가 놓친 놀라운 사실이 있습니까?

+0

왜 4 번과 26 번 라인은 매개 변수에 다른 이름을 사용합니까? 불법은 아니지만 이상합니다. –

+2

당신은'stdio.h'에 선언문을 게시하지 않았 음을 주목하십시오. 이것은 충돌의 * 진짜 * 지점입니다. 분명히 * 귀하의 * 선언과 구현은 서로 일치해야합니다. 경고는'getline()'이 이미 선언되었고, * your * 코드 (프로토 타입이나 정의)와 일치하지 않는다고 알려줍니다. * that * decl (stdio.h, 줄 675)를 보라. – WhozCraig

+0

"getline"의 이름을 "getln"으로 변경했을 때 완벽하게 작동했습니다. 정말 고마워! – JazzBullets

답변

8

getlinestdio.h으로 선언됩니다. 이것은 ISO C 표준에 의해 규정되지는 않았지만 원래 GNU에 의해 그리고 나중에 POSIX에 의해 확장으로서 지정됩니다. 사전 정의 된 getline 함수에 대한 자세한 내용은 man getline을 참조하거나 official POSIX description을 참조하십시오.

이 있습니다 (restrict 예선을 생략하면 공간을 절약하기 위해) 분명히 아마 이런 식으로 뭔가를 보이는 stdio.h의 선언과 충돌 같은 이름을 가진 자신의 기능을 선언했습니다

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

중 하나를 사용 함수의 다른 이름 (get_line)을 사용하거나 버전을 getline으로 표시하지 않도록 코드를 컴파일하십시오 (예 : -std=c99 -pedantic).