2012-04-21 2 views
1

다음은 내 코드입니다. Visual Studio에서 실행하려고합니다.C에서 재정의 오류가 발생하는 이유는 무엇입니까?

#include <stdio.h> 
#include <conio.h> 
int main() 
{ 
    //int i; 
    //char j = 'g',k= 'c'; 
    struct book 
    { 
     char name[10]; 
     char author[10]; 
     int callno; 
    }; 
    struct book b1 = {"Basic", "there", 550}; 
    display ("Basic", "Basic", 550); 
    printf("Press any key to coninute.."); 
    getch(); 
    return 0; 
} 

void display(char *s, char *t, int n) 
{ 
    printf("%s %s %d \n", s, t, n); 
} 

함수의 여는 중괄호가 입력 된 행에서 재정의 오류가 발생합니다.

답변

5

선언하기 전에 display을 호출하면 컴파일러에서 반환 유형이 int이라고 가정하지만 반환 유형은 void입니다. 예를

void display(char *s, char *t, int n); 
int main() { 
    // ... 

은 또한 당신이 char*를 수신로 선언하지만, (const char*을)에 문자열 리터럴을 전달할 것을주의 중 하나 선언을 변경하거나 인수를 변경 :

것은 그것을 사용하기 전에 함수를 선언 :

+0

Nitty pick : C에서는 문자 리터럴의 요소가 C++에서와 같이'char'가 아닌'const char '유형을가집니다. –

+0

@DanielFischer - 당신이 자세히 설명해 주시겠습니까? 당신은'char * a = "abc"'가'const char * a = "abc"'C보다 낫다는 것을 의미합니까? – MByD

+0

C에서''Basic ''은'const char [6]'이 아니라'char [6]'타입을 가지고 있음을 의미합니다. 문자열 리터럴을 수정하려는 시도는 UB이므로 'const char *'에 할당하는 것이 더 좋지만 언어 사양에 따라 유형이 다릅니다. –

관련 문제