2014-03-05 4 views
0

미리 ++ C에서 함수 프로토 타입을 선언 할 이유가 있습니까함수 프로토 타입을 선언해야합니까?

int foo(int); 

int foo (int n) { 
return n; 
} 

int foo (int n) { 
return n; 
} 

비교? 자바 배경에서 왔기 때문에 함수 프로토 타입을 선언 한 적도 없으며 다소 새로운 것입니다.

+1

또한 정의는 선언의 역할을합니다. 함수가 호출되기 전에 둘 중 하나가 발생해야합니다. – Adam

답변

1

모든 이름은 사용하기 전에 선언해야합니다. 따라서 함수 이름을 사용할 경우 선언해야합니다. 함수 정의는 동시에 선언입니다. 그래서

int foo (int n) { 
return n; 
} 

는 컴파일 단위가 정의되지 않습니다 동일한 기능의 여러 선언을 포함 할 수 있습니다 고려 함수를 정의 할 단순히 충분하다

int foo(int); 

int foo (int n) { 
return n; 
} 

을 쓸 필요가 없다.

0

아니요, 호출 된 함수가 보다 작 으면 호출 함수 앞에 프로토 타입을 쓸 필요가 없습니다. 프로토 타입은 컴파일러가 선언 된 함수가 나중에 정의됨을 이해할 수 있도록 작성됩니다. 따라서 호출 된 함수가 이후에 으로 작성된 경우에도 오류가 발생하지 않습니다.

1

정의를 사용하기 전에 함수를 선언하기 만하면됩니다. 이제 전

int foo(); 

int main(...) 
{ 
    //I can use foo now 
    int x = foo(): 

} 

에 대한

이 당신이 원하는 일단은 훨씬 더 큰 차이를 만드는 작은 승리처럼 솔기 동안 아무도 1 만 달러를 관리 할 수 ​​있기 때문에 당신이 필요로 결국합니다 여러 CPP 파일에서 공유하는 기능 라인 소스 코드 파일.

그래서 지금은이

foo.h

int Foo(); 
지금

MAIN.CPP에게 헤더를

#include "foo.h" 
int main(..) 
{ 
    //I can use it here 
    Foo(); 
} 

을 포함하여 모든 소스에 푸()를 사용할 수

bob.cpp

#inlcude "foo.h" 
int doSomething() 
{ 
    // and here 
    Foo(); 
} 

그리고 foo.cpp에서만 정의합니다.

먼저 필수 사항입니다. 머리글에 정의를 넣으면 one definition rule에 위배됩니다. 다른 큰 이점은이 함수를 odr을 우회 할 수있는 템플릿 함수로 변경하면 컴파일 시간이 훨씬 빨라진다는 것입니다.

관련 문제