강좌 & 팁
분할 컴파일을 통한 static, extern 확인
다음의 예제를 통해 static, extern 의 사용을 확인해 보자
파일은
main.c main.h test.c test.h로 구성된다.
main.c
#include "main.h"
#include <errno.h>
#include "test.h"
static int iA = 3;
extern int iB;
int main()
{
printf("main :: start!!------\n");
test(10);
printf("errno:%d\n", errno);
printf( "main :: iA : %d\n", iA);
printf( "main :: iB : %d\n", iB);
printf("main :: end!!------\n");
return 0;
}
main.h
#ifndef __MAIN_H__
#define __MAIN_H__
#include <stdio.h>
#include <stdlib.h>
#endif
test.c
#include <stdio.h>
#include "test.h"
int iA;
int iB = 3;
void test(int iNum)
{
printf("main :: start!!------\n");
printf("test :: iNum = %d\n", iNum);
printf( "main :: iA : %d\n", iA);
printf( "main :: iB : %d\n", iB);
printf("main :: end!!------\n");
return;
}
test.h
#ifndef __TEST_H__
#define __TEST_H__
extern int iB;
void test(int);
#endif
출력 결과를 보자
분할 컴파일 과정
1. gcc -c *.c (.o파일 생성)
2. gcc -o main *.0
3. gcc -o main *.c (위의 1, 2번 과정을 동시에 함)
static의 두 가지 의미
1. 전역 변수처럼 취급된다. (지역 변수로 사용시)
2. 다음 파일에서 접근할 수 없는 전역 변수가 된다. (전역 변수로 사용시) - 접근속성
static 클래스와extern 클래스는 auto 클래스나 register 클래스와는 달리 함수의 실행이 끝난 뒤에도 남아있는 변수다.
static 클래스는 함수의 내부에서나 외부에서 모두 선언될 수 있고 extern 클래스는 함수의 외부에서만 선언된다.
static 변수는 초기화를 하지 ㅇ낳아도 시스템에 의해서 자동적으로 0이나 NULL로 초기화 된다.