
// 함수 선언만 한 것 (반환은 없음)
int Add(int a, int b);
int Sub(int a, int b);
int global= 0;
#include "func.h"
int Add(int a, int b)
{
global = 10;
return a + b;
}
int Sub(int a, int b) // 여러 함수를 만들어 놓을 수 있음
{
return a - b;
}
#include "func.h"
int main()
{
int data = Add(10, 20); // 호출
global = 20;
return 0;
}
만일 위와 같이 global을 선언할 경우 오류가 발생
헤더 파일의 역할: 헤더 파일은 여러 소스 파일(.cpp)에서 공유될 함수, 클래스, 변수 등의 선언을 담는 역할
포함(Include)의 원리: main.cpp와 func.cpp는 #include "func.h"를 통해 헤더 파일의 내용을 그대로 복사해옴. 이 과정에서 global 변수의 정의가 각 파일에 중복되어 생성.
다중 정의 오류 (Multiple Definition Error):
컴파일러는 각 파일을 독립적으로 컴파일한 후, 링커가 이들을 합치는 과정에서 동일한 이름의 전역 변수 global이 두 번 정의된 것을 발견하고 오류를 발생
정적 변수 & 외부변수
정적 변수는 선언되는 위치에 따라 의미가 달라진다.



-> 외부변수를 사용해야함

헤더파일에 g_iExtern 선언
단! 초기화는 하면 안됨!


g_iStatic = 100;
g_iExtern = 500;
이라고 main 에서 선언하고
Add(0,0) 함수를 호출하면!


결과는 아래와 같이 나옴
g_iSatic은 정적변수이기 때문에 func.cpp 위에서 선언한 g_iStatic = 0 값이 들어온 것이고,
g_iExtern은 외부변수였기때문에
main 에서 500넣어줬던 값이 나왔던 것!

정적 변수 (static) : 정적 변수는 차단과 방어의 역할
외부 변수 (extern) : 외부 변수는 공유를 위한 것
✅ 확인하기
Q. 외부변수와 정적변수의 쓰임에 대해 말해보시오