티스토리 뷰
static 의 특성
- - 전역, 지역 관계없이 static 키워드가 붙은 변수는 프로그램 시작과 동시에 할당 및 초기화.
- - 단 한번 할당 및 초기화되고 프로그램 종료시까지 메모리 공간에 존재
변수
전역 static 변수
- - 외부 파일에서 접근을 허용하지 않는다. 즉 "이 변수의 접근범위는 파일 내부로 제한한다" 이다.
- - 다른 파일에서 extern int num; 으로 참조를 하면 컴파일시 에러 발생.
//main.cpp
static int age = 14;
int year = 2023;
int main(int argc, char* argv[])
//func.cpp
extern int age; //error
extern int year;//ok
int func(){
age++;
year++;
}
지역 static 변수
- - 선언된 함수 내에서만 접근 가능(지역변수적 특성)
함수
- - c에서는 js처럼 함수 안에서 함수를 만들 수 없다. 그래서 지역함수라는 것은 없다.
- - 모든 함수는 전역함수이므로 위의 전역변수에 설명한 내용이 그대로 적용된다.
//main.cpp
static int sum();
void show();
int main(int argc, char* argv[]){
return 0;
}
static int sum(){ //함수의 정의는 static 생략가능. 단! 선언에 static이 없으면 정의에도 없어야함.
//증가연산
}
void show(){
//출력
}
//func.cpp
extern int sum(); //error
extern void show(); //ok
int func(){
sum();
show();
}
추가 의문점
- - main.cpp에 static int gNum = 0; 을 선언하고 sum() 함수에서 gNum++; 을 시키면 어떻게 될까?
- - 답은 아무 문제 없이 잘 실행된다. extern은 아마도 해당 파일로 찾아가 내부에서 함수를 실행시킨다고 보면 될것 같다.
한번도 써본적없는 register 키워드
- - c와c++에서 사용되어지는 키워드로 컴파일러에게 CPU의 레지스터 공간에 메모리를 적재하라는 키워드다.
- - 다만 register int num = 3; 이렇게 선언을 한다고 하더라도 실제로 레지스터에 할당이 되는 것은 컴파일러의 판단이다.
- - register로 선언하지 않아도 컴파일러가 판단하면 register에 적재 될수도 있다.
- - 지역변수로만 가능하고 전역변수는 불가능하다!(레지스터 메모리는 매주 작은 메모리라서 비용이 아주 비싸다)
클래스에서의 static 변수는 다음 포스팅으로 해보자.
'C\\C++' 카테고리의 다른 글
[C/C++] 10, 2, 16, 8 진수 변환 규칙 (0) | 2023.01.07 |
---|---|
[C/C++] 가변인자 함수 (1) | 2023.01.04 |
[C/C++] 조건부 컴파일(#if #ifdef #ifndef #endif···) (0) | 2023.01.01 |
[C/C++] #define 매개변수의 결합과 문자열화 (0) | 2022.12.28 |
[C/C++] 선행처리기(전처리)와 매크로 (0) | 2022.12.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Double.compareTo(Double)
- C++
- 네트워크 오더링
- 나만의 강점
- C언어
- Builder #SuperBuilder
- JPA #SPRING #ENTITY #DATABASE
- Til
- java
- linux select
- c 매크로
- ajax 403에러
- c++ 가변인자
- 전처리기
- ##연산자
- Java Double형 비교방법
- Java8 #java stream
- #define
- JPQL 사용하기
- JPA #cascade
- javascript 문자열 뒤집기
- 매크로
- MySql 날짜 차이 구하기
- c 가변인자
- 메소드 참조 연산자
- JavaScript
- static의 장점 단점
- 이중 콜론 연산자
- 표준입출력 함수
- 영속성전파
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함