C언어 선언과 정의 차이점

1 개요[ | ]

선언과 정의 차이점
Difference between Declaration and Definition
  • 선언과 정의의 가장 큰 차이점은 메모리가 할당되는지를 보면 된다.

2 선언[ | ]

  • 컴파일러에게 변수의 정보만을 준다.
  • 실제 메모리를 사용하지는 않는다.
  • 그러한 변수가 있다는 정보(메타데이터)만 있고 실제 데이터는 없는 것이다.
  • 물론 메타데이터만 있더라도 전혀 메모리를 사용하지 않는 것은 아니고, 선언 그 자체에 대한 메모리는 사용한다.
  • 선언만으로는 그 선언이 가리키는 실체에 대해 메모리를 할당하지는 않는다는 것이다.
  • 비유하자면 건물의 명칭은 장부에 기록하지만, 실제 건물을 짓지는 않은 상황이라 할 수 있다.
C
Copy
extern int a;
C
Copy
int a();
C
Copy
struct a;
C
Copy
typedef unsigned int UINT;
C
Copy
#define SUM(a, b) (a + b)

3 정의[ | ]

  • 컴파일러에게 실제 변수를 생성하도록 한다.
  • 실제 메모리를 사용한다.
C
Copy
int a;
C
Copy
int a()
{
    return 0;
}
C
Copy
struct x {
    int x;
    int y;
};

4 같이 보기[ | ]

편집자 J Jmnote Jmnote bot
  • C, C++ 주석
    C에도 적용되는 주석 문법이라면, "C와 C++ 주석"으로 제목을 옮기면 어떨까요? Ykhwong
  • C, C++ 주석
    @Ykhwong 네네. 좋은 의견 입니다. 변경 부탁드려요. John Jeong
  • C, C++ 주석
    'C스타일 주석'이라는 제목도 괜찮겠네요.J Jmnote
  • C, C++ 주석
    'C, C++ 주석' 형태로 최종 가도록 하겠습니다. C와 C++ 까지의 현재 범위를 명확히 하려 합니다. John Jeong
  • C언어 연결리스트 구현
    마지막에 메모리 해지는 어떤식으로 해야되나요?? 돌멩이
  • C언어 연결리스트 구현
    @돌맹이 head 가 널까지 가는거 보시고 코드가 아름 답진 않지만 대략 아래 방법처럼 하나씩 삭제 하시면 될 것 같습니다. void deleteNode(nodeType *head) { nodeType *ptr = head, *ptr2 = NULL; while(ptr- John Jeong
  • C언어 연결리스트 구현
    답변 감사합니다! 돌멩이