선언과 정의의 차이
개념 | 설명 | 메모리 할당 여부 |
선언(Declaration) | 어떤 이름(변수, 함수 등)이 존재한다는 사실을 알리는 것 | |
정의(Definition) | 이름에 실제 메모리 공간을 할당하는 것 - 변수면 저장 공간, 함수면 본체(body)를 포함 |
변수의 선언 vs 정의
// 선언 - 다른 곳에 정의되어 있을 거라고 알림
extern int count;
// 정의 - 실제 메모리 공간을 할당
int count = 0;
C
복사
extern : 해당 변수가 다른 파일 어딘가에 정의되어있음을 컴파일러에게 알려주는 용도
함수의 선언 vs 정의
// 선언 - 함수가 이런 시그니처를 가지고 있다는 것을 알림
int add(int a, int b);
// 정의 - 함수의 실제 동작 구현
int add(int a, int b)
{
return a + b;
}
C
복사
.h 파일 & .c파일
.h 파일 : 헤더 파일
선언
•
함수 선언, 전역 변수 선언, 매크로, 구조체 정의 등이 포함
•
여러 .c 파일에서 공유하려는 선언을 포함시킴
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
// 함수 선언(사실 extern이 기본적으로 포함) : 명시적으로 extern해도 됨
int add(int a, int b);
// 전역 변수 선언 : "다른 곳 어딘가에 정의되어있으니까 찾아서 써!"
extern int counter;
#endif
C
복사
.c 파일 : 소스 파일
정의
•
함수 본체나 전역 변수의 실제 구현에 해당
// math_utils.c
#include <stdio.h>
#include "math_utils.h"
int counter = 0;
int add(int a, int b)
{
counter++;
return a + b;
}
C
복사
// main.c
#include "math_utils.h"
#include <stdio.h>
int main()
{
int result = add(5, 10);
printf("Result : %d\n", result);
return 0;
}
C
복사

