2014-04-07 7 views
1

개념적 질문.형식 호환 규칙 및 함수 선언

Line 4: error: conflicting types for 'brasa' 
Line 3: note: previous declaration of 'brasa' was here 
Line 5: error: conflicting types for 'brasa' 
Line 3: note: previous declaration of 'brasa' was here 

는 그 메시지의 종류 :

#include<stdio.h> 

int brasa(int, float); 
int brasa(int, int); 
float brasa(int, int); 

int main(){ 

return 0; 
} 

컴파일러는 다음과 같은 오류를 제공합니다 : 다음 코드를 고려? 또 다른 개념적 질문 : 세 가지 선언을하십시오 모두 동일한 기능을 선언 하시겠습니까?

+1

"어떤 종류의 메시지입니까?" 코드에 오류가 있음을 알리는 오류 메시지입니다. "3 가지 선언은 모두 같은 기능을 선언합니까?" 개념적으로, 아뇨, 아무 것도 선언하지 않습니다. 코드가 컴파일되지 않기 때문입니다. 당신은 틀림없이 첫 번째 것이 무언가를 선언하고 다른 것은 오류라고 말할 수 있지만 코드가 컴파일되지 않으면 실제로는 큰 문제가되지 않습니다 ... – twalberg

+0

형식 호환성 협약을 위반 한 이유는 무엇입니까? – user3482381

+2

"형식 호환 규칙"은 함수 선언에 사용되지 않습니다. @haccks는 대답에서 언급했듯이 C는 인자/반환 유형이 다른 경우에 오버로드가 발생하지 않고 특정 이름을 가진 함수를 하나만 선언 할 수 있습니다. 'float f = 1;'은 다른 이야기입니다 - 타입 호환성이 중요한 부분입니다. 컴파일러는 필요에 따라 자동으로 적절한 변환을 삽입합니다 ... – twalberg

답변

3

C에서는 변수/함수 multiple times을 서로 다른 유형 (호환되지 않는 유형)으로 선언 할 수 없습니다. C++과 달리 C에서와 달리 함수 오버로드가 없습니다.

+1

아래로 유권자를 남겨주세요. 그것은 인정 될 것이다. – haccks

+2

나는 다운 voter가 아니지만 https://gist.github.com/Keith-S-Thompson/10063239 –

+0

@KeithThompson; 이봐, 왜 여기있는거야? 글로벌 변수를 사용하여 시도하고 너무 일하고있다! – haccks