기본적으로 소스파일이 같은 프로젝트에 있어서 컴파일할 때 링킹이 되는 경우 함수는 별다른 추가 코드 작성 없이 공유된다.
아래 코드를 예시로 보자
main.c
int main()
{
Hyndrome();
return 0;
}
hyndrome.c
#include <stdio.h>
void Hyndrome()
{
printf("I am HYndrome\n");
}
하지만 변수는 공유되지 않는다.
extern
extern 키워드를 사용하면 변수도 공유할 수 있다.
아래 예시를 보자
main.c
#include <stdio.h>
extern int a = 1;
int main() {
printf("main1 %d\n", a);
Hyndrome();
printf("main2 %d\n", a);
return 0;
}
hyndrome.c
#include <stdio.h>
int a;
void Hyndrome() {
//main.c 에서 extern 된 a 값 출력
printf("Hyndrome1 %d\n", a);
a = 2;
printf("Hyndrome2 %d\n", a);
}
활용
header에 extern 변수를 사용하는 경우
#include만 하면, 누구나 쓸 수 있는 전역 변수가 된다
common.h
#ifndef COMMON_H
#define COMMON_H
extern int globalVariable;
#endif
소스 파일에 extern 변수를 사용하는 경우
내부적으로 전역 변수를 사용할 때 사용
#include "common.h"
void function1()
{
extern int globalVariable;
}
Static
static은 다양한 곳에 쓰인다.
함수 내 지역 변수 앞 : 전역 변수화
프로그램이 종료될 때까지 변수의 값이 유지되지만 해당 함수 내부에서만 접근이 가능함
#include <stdio.h>
void function1()
{
static int var1 = 0;
for (int i = 0; i < 5; i++)
{
printf("function1: %d\n", var1++);
}
}
int main()
{
function1();
function1();
// printf("result : %d\n", var1); 불가능: var는 function1 내부에서만 접근 가능
return 0;
}
전역 변수 앞 : 다른 소스 파일에서 공유 불가 ( static > extern)
파일 내부에서만 접근할 수 있는 파일 범위(File scope)를 가지게 된다.
다른 파일에서 전역 변수 이름이 충돌하지 않도록 보호한다.
static은 extern 보다 우선 순위를 가진다.
'C language' 카테고리의 다른 글
함수포인터 (0) | 2024.12.14 |
---|---|
변수 키워드 const, volatile (1) | 2024.12.14 |
전처리지시문, Header Guard (1) | 2024.12.14 |
c 구조체, 유니온, typedef, 패딩, 비트필드 (0) | 2024.12.13 |
고정길이 정수 - stdint.h (0) | 2024.12.13 |