선언(declaration)하는 것과 정의(definition)하는 건 뭐가 다른 건가요?


선언(declaration)하는 것과 정의(definition)하는 건 뭐가 다른 건가요? 그냥 {}이 있고 없고의 차이인가요?

  • 2016년 01월 13일에 작성됨

조회수 251


1 답변


좋아요
0
싫어요
채택취소하기

선언은 identifieridentifiertype을 정하는 역할을 합니다. identifierint, char같은 일반적인 type일지, object일지, 함수가 될지는 것은 선언부에서 결정 됩니다. 선언은 컴파일러가 identifier를 reference로 받아들일 수 있게 합니다.

다음 코드는 전부 선언에 해당하지요

extern int bar;
extern int g(int, int);
double f(int, double);
class foo;

정의는 identifier를 구현(implement)하는 역할을 합니다. 링커가 referenceentity를 연결하는데 쓰이지요. *정의는 선언과 함께 쓰일 수 있습니다.

다음 코드는 위의 선언과 대응하는 정의입니다

int bar;
int g(int lhs, int rhs) {return lhs*rhs;}
double f(int i, double d) {return i+d;}
class foo {};

identifier를 선언하는 데에는 거의 제약이 없습니다. 다음의 선언은 C/C++에서 모두 문제 없이 쓸 수 있습니다. (다만 같은 scope내에서는 이 중 하나만 쓸 수 있습니다.)

double f(int, double);
double f(int, double);
extern double f(int, double); // the same as the two above
extern double f(int, double);

symbol을 선언해놓고 정의하지 않았을 때에는 linker가 해당 symbol을 알려주고 symbol을 여러 번 정의해 놓은 경우 링커가 어떤 정의를 link 해야 할지 알 수 없기 때문에 중복된 symbol을 알려줍니다.

  • 2016년 01월 13일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close