미리 ++ C에서 함수 프로토 타입을 선언 할 이유가 있습니까함수 프로토 타입을 선언해야합니까?
int foo(int);
int foo (int n) {
return n;
}
대
int foo (int n) {
return n;
}
비교? 자바 배경에서 왔기 때문에 함수 프로토 타입을 선언 한 적도 없으며 다소 새로운 것입니다.
미리 ++ C에서 함수 프로토 타입을 선언 할 이유가 있습니까함수 프로토 타입을 선언해야합니까?
int foo(int);
int foo (int n) {
return n;
}
대
int foo (int n) {
return n;
}
비교? 자바 배경에서 왔기 때문에 함수 프로토 타입을 선언 한 적도 없으며 다소 새로운 것입니다.
모든 이름은 사용하기 전에 선언해야합니다. 따라서 함수 이름을 사용할 경우 선언해야합니다. 함수 정의는 동시에 선언입니다. 그래서
int foo (int n) {
return n;
}
는 컴파일 단위가 정의되지 않습니다 동일한 기능의 여러 선언을 포함 할 수 있습니다 고려 함수를 정의 할 단순히 충분하다
int foo(int);
int foo (int n) {
return n;
}
을 쓸 필요가 없다.
아니요, 호출 된 함수가 보다 작 으면 호출 함수 앞에 프로토 타입을 쓸 필요가 없습니다. 프로토 타입은 컴파일러가 선언 된 함수가 나중에 정의됨을 이해할 수 있도록 작성됩니다. 따라서 호출 된 함수가 이후에 으로 작성된 경우에도 오류가 발생하지 않습니다.
정의를 사용하기 전에 함수를 선언하기 만하면됩니다. 이제 전
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을 우회 할 수있는 템플릿 함수로 변경하면 컴파일 시간이 훨씬 빨라진다는 것입니다.
또한 정의는 선언의 역할을합니다. 함수가 호출되기 전에 둘 중 하나가 발생해야합니다. – Adam