2016-08-03 6 views
1

프로토 타입을 올바른 방법으로 정의하는 방법에 대해 의심스러워하는 상황이 생겼습니다.프로토 타입을 정의하는 올바른 방법

경고 : 기능이없는 경고 다음

void bar() { 
    Do something; 
} 

가 제공합니다 :

문서 행 :

#define foo bar 

void mon() { 
    foo(); 
} 

문서 기원전 키우면 쉽게 단순한 예를 살펴합니다 전체 프로토 타입

일반적으로 다음과 같이 답합니다.

그러나보기와 같이이 함수는 정확히 존재하지 않지만 다른 함수를 가리 키도록 정의되어 있습니다. 이것을위한 프로토 타입을 만드는 올바른 방법은 무엇입니까?

컴파일러는 bar와 매크로 foo을 대체하지만 그 단계 bar에 있지 그것을 찾을 수 없습니다, 어디서나 컴파일러가 불평하는 함수로 선언되어 있기 때문에 :

+0

다른 기능을 가리 키기 위해 정의되지 않았습니다. 토큰 대체를 지정하는 전 처리기 지시문입니다. 함수가 전혀 선언되지 않았습니다. – StoryTeller

+1

'#define foo bar' 무엇을하고 싶습니까? –

+0

@ Lightness 궤도의 종족, 이봐, 나는 아무것도하려고하지 않는다. 이 경고는 Umon 부트 로더에서 비롯된 것입니다. 그래서 저는 생각의 방향을 "수정"하려합니다. – Pedersen

답변

0

합니다.

bar의 정의가 위의 선언과 일치하지 않습니다. bar의 정의 읽어야합니다 C에서

void bar(void) { 
    // Do something; 
} 

을, C++, (void)의 인수 목록이 빈 인수 목록에서 미묘하게 다르다 달리.

+0

안녕하세요, 고마워요! 그것은 실제로 의미가 있습니다. 올바른 방법은 내가 항상하는 것처럼하는 것입니다. – Pedersen

0

나는 무슨 일하면 다음이라고 생각합니다.

더 참조하십시오 컴파일러가 같은 소스 파일에 대한 #define foo bar 후에는 extern void bar(void);로 구문 분석 그리고 링커 그냥 bar 기호를 해결할 선언을 extern void foo(void);가 발생 Are prototypes required for all functions in C89, C90 or C99?

관련 문제