2013-04-02 4 views
-1

다음과 같이 컴파일에 문제가 있습니다. 헤더 파일 abc.habc.c에 포함됩니다.왜이 충돌 유형 선언입니까?

abc.c:23:7: error: conflicting types for ‘foo’ 
In file included from abc.c:18:0: 
abc.h:64:15: note: previous declaration of ‘foo’ was here 

: 헤더 파일에서

, 난 내가 GCC에서 컴파일 오류가 발생하지만이

char *foo[] = { ".mp3", ".mp4" }; 

이 소스 파일에서이

extern char **foo; 

이 이 오류가 발생하는 이유는 무엇입니까?

답변

5

하나는 포인터의 배열이고 다른 하나는 포인터에 대한 포인터입니다. 아주 다른 물건. 배열로 선언하십시오 :

extern char *foo[]; 
+0

@KingWeeWee 함수 선언에서 다르게 작동합니다. – cnicutar

+0

char * p는 char [] p와 같습니다. 감사합니다. – KingWeeWee

+0

@KingWeeWee : 당신은 착각했습니다, 그들은 같은 타입이 아닙니다. 컴파일러가 "지정되지 않은 크기의 X 배열"유형의 외부 심볼을 ​​볼 때 실제로 링크 할 대상은 첫 번째 요소와 동일한 위치에서 시작하는 배열의 주소입니다. 그럼에도 불구하고 유형은 첫 번째 요소에 대한 포인터의 유형과 다릅니다. –

0

extern char[]extern char *

그리고 통근 선언이 하나의 정의와 일치하도록되어 대한

서로 다른 두 가지이다.

extern char **foo; 

일치

char **foo; 

char *foo[]; 

같은 일을 일치하지 않는

extern char *foo[]; /* matches */ 
char *foo[];