정적변수(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 |
댓글