반응형
Declaration은 변수의 이름, 타입, 초기값(있다면)에 대한 정보를 컴파일러에게 알려주는 것이다. 즉 선언이란 한 변수의 속성에 대해 자세한 내용을 제공하는 것이다.
Definetion이란 변수가 어디에 저장되어있는지, 즉 변수가 메모리 어디에 할당되는지를 말한다.
C에서 변수에 대한 선언과 정의는 동시에 일어난다.
int a;
a
라는 변수에 이름(a)과 타입(int)같은 정보가 컴파일러로 보내져 심볼테이블이라는 자료구조에 저장될 것이다. 이를 통해 메모리에는 4byte가 할당될 것이다.
변수의 선언은 일어나지만 정의는 일어나지 않는 경우를 보자. 바로 extern
키워드를 사용할 때 이다.
xxxxxxxxxx
extern int a;
extern
키워드는 다른 파일에서 미리 정의된 변수 이름을 가져올 때 사용한다. 즉 이미 다른 파일에 해당 변수에 대해 정의가 되었기 때문에 다시 정의할 필요 없이 선언만 해준다.
함수 또한 선언과 정의부분으로 나누어진다.
xxxxxxxxxx
int add(int, int);
위의 코드는 add
라는 함수를 선언하여 반환형(int)와 파라미터 수와 타입(int)를 전달한다. 아직 함수의 동작은 정의되지 않은 상태이다.
xxxxxxxxxx
int add(int a, int b)
{
return a + b;
}
위처럼 함수의 정의가 있어야 이 함수의 메모리할당이 이루어진다. 이 함수 추가를 위한 메모리가 할당되는 것이다.
요약
- 변수 또는 함수는 여러번 선언할 수 있지만 단 한번만 정의된다.
- 선언에는 메모리가 할당되지 않지만, 정의에는 메모리가 할당된다.
- 함수의 선언을 통해 컴파일러가 인자, 반환값의 타입을 알 수 있다.
- 함수의 정의를 통해 시스템음 메모리를 할당한다.
참고
Difference between Definition and Declaration - GeeksforGeeks
반응형