ch09. 함수와 변수
9.1 변수의 속성
[변수의 속성] (3가지)
-유효범위 : 변수 참조(사용) 가능 범위, 변수가 정의되는 위치에 따라 달라짐
-생존기간 : 메모리에 존재 시간
-연결 : 다른 영역에 있는 변수와의 연결
[지역변수와 전역변수] : 변수가 선언되는 위치에 따른 분류
-지역변수 : 블록 내부에서 정의
-전역변수 : 블록 외부에서 정의
9.2 지역변수
-지역변수 : 블록 내부에서 정의됨
: 선언된 블록 안에서만 접근과 사용 가능
[지역변수 선언위치]
-블록의 맨 첫 부부에서 정의 (최근에는 블록 안이면 어디든지 선언 가능)
[이름이 같은 지역변수]
-지역변수는 기본적으로 선언된 블록 안에서만 유효하므로
선언되어있는 지역만 다르다면 동일한 이름의 변수가 또 존재해도 문제 발생 X
[지역변수 생존시간]
-지역변수 선언과 동시에 시스템 스택(메모리 공간) 생성되어 초기화되었다가
선언된 블록 종료 시 자동메모리 반환 소멸
[지역변수 초기값]
-지역변수는 따로 초기값 지정해주지 않을 경우 ‘쓰레기값’ 들어있다
[함수의 매개변수]
-매개변수도 지역변수의 일종이다.
매개변수는 호출 시의 인수값이 복사되어 초기화되어있고 해당 함수 종료 시 자동 소멸됨
-따라서, 값에 의한 호출 시 -> 인수의 값 자체가 바뀌는 것은 X
9.3 전역변수
-전역변수 :함수 외부에서 선언되는 변수
-전역 변수의 범위는 소스파일 전체
모든 함수에서 접근가능하고 사용간으
[전역변수 초기값과 생존시간]
-초기값 : 전역변수 초기화하지 않으면 자동 0으로 초기화
-생존시간 : 프로그램 시작과 동시에 생성되었다가 프로그램 종료 전까지 메모리에 존재
[전역변수 사용]
-프로그램 전체에서 공용데이터 사용 시 사용O
-단, 스파게티 코드 : 전역변수 때문에 코드 꼬이는 현상
: 검토범위가 프로그램 전체가 되어 비효율
[같은 이름의 전역변수와 전역변수]
-지역변수 우선 참조
9.4 생존 시간
[변수의 저장공간 할당 방식]
-정적 할당 방식 :프로그램 실행 동안 계속 할당되어있음
-자동 할당 방식 : 블록 종료 시 자동 메모리 반환
[생존시간 결정요인]
1) 변수 선언 위치에 따른 생존시간
2) 저장유형 지정자에 따른 생존시간
- 저장공간할당 방식 지정자
[auto 지정자] : 자동 변수 취급
-auto 키워드 붙인 변수는 지역변수처럼 자동 할당 된다.
-블록 안에서 선언된 변수에는 auto 생략되어도 자동변수로 취급
[static 지정자] : 정적 변수
-<정적 지역 변수>
유효범위 : 선언된 블록 내부에서만 사용(참조) 가능
생존시간 : 블록 종료되어도 프로그램 종료될 때까지 메모리에 정적으로 할당됨
정적 지역 변수 초기화 : 최초 실행 시 딱 한 번만 수행 (이후에는 초기화X)
- 정적 지역 변수 초기값 지정 안하면 자동 0 초기화되어있음
(cf. 자동 지역 변수 = 우리가 알고 있는 일반 지역 변수 )
-<정적 전역 변수>
하나의 소스 파일 안에서만 정적 전역 변수 사용 O 다른 소스 파일에서는 사용 X
[register 지정자] : register + 지역변수
-레지스터 변수 : 변수를 CPU의 레지스터에 저장
-지역변수만 가능
-블록 시작되면 레지스터 변수는 레지스터에 할당되고 블록 종료시 제거됨
-레지스터 변수에 주소연산자& 붙일 경우 컴파일 오류
-레지스터는 주소 없음(우리가 사용하는 메모리가 아니므로)
[volatile 지정자]
-하드웨어와 연결된 변수 앞에 붙이면 실행 할 때마다 메모리를 새로 읽음
[extern 지정자]
-이 변수가 전역변수임을 알리는 extern키워드
1) 변수 사용할 블록보다 나중에 전역변수 선언 시, extern 사용
2) 하나의 전역변수를 여러 개의 소스 파일에서 사용 할 경우 extern 사용
9.5 연결
연결 : 다른 범위에 속하는 변수들을 서로 연결하는 것 (오직 전역 변수들만 연결 가질 수 ㅇ)
-무연결 : 지역변수
-외부연결 : 여러 개의 소스 파일에 걸쳐 사용되는 전역변수
-내부연결 : 한 소스 파일 안에서만 사용 가능한 전역변수
[외부연결] extern + 전역변수
-외부 다른 소스파일에서 전역변수 사용 시 extern지정해서 해당 전역변수 사용해야 함
[내부연결] static + 전역변수
하나의 소스 파일 안에서만 사용 가능한 전역변수임
[static/extern 함수]
static 함수 :해당 소스파일 안에서만 사용가능한 함수
extern 함수 : 다른 소스 파일(외부파일)에서 사용 가능한 함수
'C++, C언어 > [문법]_C언어' 카테고리의 다른 글
C언어_ch11_정리 (0) | 2021.12.20 |
---|---|
C언어_ch10_정리 (0) | 2021.12.20 |
혼.공.C언어_프로그램예제_전체코드정리 (0) | 2021.07.27 |
혼.공.C언어_전범위_정리 (0) | 2021.07.27 |
나도코딩_C언어_전범위정리 (0) | 2021.07.27 |