본문 바로가기

Language/C C++

[C/C++] Declaration VS Definition

반응형
C C++ b34b2272f8aa4d37978a8aa92ad076ac

Declaration은 변수의 이름, 타입, 초기값(있다면)에 대한 정보를 컴파일러에게 알려주는 것이다. 즉 선언이란 한 변수의 속성에 대해 자세한 내용을 제공하는 것이다.

Definetion이란 변수가 어디에 저장되어있는지, 즉 변수가 메모리 어디에 할당되는지를 말한다.

C에서 변수에 대한 선언과 정의는 동시에 일어난다.

a라는 변수에 이름(a)과 타입(int)같은 정보가 컴파일러로 보내져 심볼테이블이라는 자료구조에 저장될 것이다. 이를 통해 메모리에는 4byte가 할당될 것이다.

변수의 선언은 일어나지만 정의는 일어나지 않는 경우를 보자. 바로 extern 키워드를 사용할 때 이다.

extern 키워드는 다른 파일에서 미리 정의된 변수 이름을 가져올 때 사용한다. 즉 이미 다른 파일에 해당 변수에 대해 정의가 되었기 때문에 다시 정의할 필요 없이 선언만 해준다.

함수 또한 선언과 정의부분으로 나누어진다.

위의 코드는 add 라는 함수를 선언하여 반환형(int)와 파라미터 수와 타입(int)를 전달한다. 아직 함수의 동작은 정의되지 않은 상태이다.

위처럼 함수의 정의가 있어야 이 함수의 메모리할당이 이루어진다. 이 함수 추가를 위한 메모리가 할당되는 것이다.

요약

  • 변수 또는 함수는 여러번 선언할 수 있지만 단 한번만 정의된다.
  • 선언에는 메모리가 할당되지 않지만, 정의에는 메모리가 할당된다.
  • 함수의 선언을 통해 컴파일러가 인자, 반환값의 타입을 알 수 있다.
  • 함수의 정의를 통해 시스템음 메모리를 할당한다.

 

참고

Difference between Definition and Declaration - GeeksforGeeks

 

 

반응형

'Language > C C++' 카테고리의 다른 글

[C++] std::map  (0) 2021.04.13
[C++] std::endl  (0) 2021.04.12
[C++] 클래스 표준 입출력  (0) 2021.04.11
[C++] Reference(1/2)  (0) 2020.09.13
[C++] 클래스 생성자  (0) 2020.04.09