C응용_ch09_정리

728x90

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 함수 : 다른 소스 파일(외부파일)에서 사용 가능한 함수

728x90

'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