본문 바로가기
c & c++/c언어 기초 개념

정적변수(static), 외부변수(extern)

by 일상코더 2022. 7. 19.

정적변수(static) =

                             선언되는 위치에 따라서 동작이 조금씩 차이는 있지만 공통적인 뜻차이는 변하지 않는다.

                             새로운 기능 이라기 보단 제한을 걸어주는것이 기능

 

정적변수

전역변수와 다르게 파일 고유의 정적으로 선언된 변수임으로 Link에러(중복x)가 나지 않는다.

c++ 문법 기준 static 변수 선언한 구문은 최초 한번만 실행하고 그이후부터 건너뛴다.

접근을 제한 함으로써 방어적 코드를 구현할 수 있다. (전역변수와 차이점)

#include <stdio.h>
#include "func.h"

static int i = 0; //정적변수
int global_i = 0; //전역변수

int test(); //함수선언
int main(void)
{
	i = 50;
	test(); //함수호출
	test();
	test();
	test();
	int iCall = test(); 

	global_i = 0;
	printf("%d ", iCall);


	return 0;
}

int test() //함수
{
	static int i = 0; // c++ 문법 기준 static 변수 선언한 구문은 최초 한번만 실행하고 그이후부터 건너뛴다.
	global_i++;
	i++;

	return i;
}

 

외부(extern) 변수

 

common.h

#pragma once

static int i = 0;
extern int j;  // 초기화 해주면 안됨(Link에러) 그냥 이런 코드가 있어요라고 선언!

main.cpp

#include <stdio.h>
#include "func.h"
#include "common.h"

int main(void)
{
 j = 500; //있다고 했으니깐 초기화
 
 return 0;
}

test.cpp

//실제로 선언 및 초기화 해주는 파일
extern int j = 0;

common.h파일에 있다고만 해주고 main.cpp파일 함수에 초기화 해주면 컴파일 에러가 나지않고 나중에 Link 과정에서 test.cpp 가 합쳐져서 결과적으로 에러가 발생하지 않음

'c & c++ > c언어 기초 개념' 카테고리의 다른 글

정수형 자료형  (0) 2022.07.28
운영체제  (0) 2022.07.19
분할구현  (0) 2022.07.18
지역변수, 전역변수  (0) 2022.07.18
재귀함수(Recursive Function)  (0) 2022.07.18

댓글