[C/C++] Declaration VS Definition

2021. 4. 16. 23:54·Language/C C++
반응형
C C++ b34b2272f8aa4d37978a8aa92ad076ac

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

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'Language/C C++' 카테고리의 다른 글
  • [C++] std::map
  • [C++] std::endl
  • [C++] 클래스 표준 입출력
  • [C++] Reference(1/2)
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (124)
      • Spring Framework (10)
        • Spring (5)
        • JPA (3)
        • Spring Security (0)
      • Language (52) N
        • Java (12) N
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (3)
      • 프로젝트 (2)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    pytorch
    php
    PS
    알고리즘
    C++
    딥러닝
    언리얼엔진4
    자바
    MySQL
    FPS
    Unreal Engine
    웹
    게임 개발
    CPP
    프로그래머스
    클래스
    Python
    mscoco
    JavaScript
    블루프린트
    게임
    redis
    Unreal
    파이썬
    C
    memcached
    select
    NUXT
    JS
    map
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[C/C++] Declaration VS Definition
상단으로

티스토리툴바