9.1 함수란
함수 : 특정작업을 수행하는 코드의 집합
장점 : 코드의 안정성 향상 , 에러 수정에 용이 , 재사용성 향상 , 복잡성은 낮추고 응집력은 높인다
9.2 다양한 형태의 함수들
9.2.1 함수의 기본 요소
3.Int 2.main (1.void){ //함수 시작
4.함수의 기능(정의)
} // 함수의 끝
*예를 들어 sum이라는 함수의 출력 형태를 int로 설정했다면 return문으로 result를 반환할 때 result는 int형이 되어야 한다. 출력 형태와 일치하지 않은 자료형의 데이터를 반환하면 지정된 출력 형태로 자료형이 변환되어 반환된다.
9.3 함수 적용 방법
1. 함수의 정의(기능) -> 함수의 호출
- 함수의 정의 : 함수의 기능을 정의한 문장
- 함수의 호출 : 정의한 함수를 호출하는 문장
2. 함수의 선언 -> 함수의 호출 -> 함수의 정의
- 함수의 선언 : 함수의 목록이 있는 문장
- 함수의 호출 : 선언한 함수를 호출하는 문장
- 함수의 정의 : 함수의 기능을 정의한 문장
=> 2번의 경우 함수의 원형 선언을 통해서 함수목록이 몇 개인지 직관적으로 쉽게 분석할 수 있고, 대략적으로 함수의 기능을 분석할 수 있다.
9.4 변수의 종류와 범위
1. 지역변수(local variable)
: main()함수 , 조건문 , 반복문의 중괄호(블록,{})내부와 함수의 매개변수(파라미터)로 사용되는 변수
- 선언된 지역을 빠져나가면 메모리가 자동으로 소멸된다.
- 초기화하지 않으면 쓰레기 값이 저장됨
- 지역 변수의 메모리 생성 시점 : 중괄호 내에서 초기화 할 때
- 지역 변수의 메모리 소멸 시점 : 중괄호를 탈출할 때
2. 전역변수(global variable)
: 중괄호 외부에 선언되는 변수. 지역이 제한이 없으므로 프로그램 어디에서든 접근이 가능
- 어느 영역에서나 쓸 수 있지만 남용하면 가독력이 떨어지고 메모리 관리가 힘들어 진다.
- 초기화를 하지 않아도 자동으로 0이 저장됨
- 전역 변수의 메모리 생성 시점 : 프로그램이 시작될 때
- 전역 변수의 메모리 소멸 시점 : 프로그램이 종료될 때
3. 정적변수(지역변수 + 전역변수)
- 자료형 앞에 static키워드를 붙임(정적)
- 프로그램이 종료되지 않는 한 메모리가 소멸되지 않음(전역)
- 초기값을 지정하지 않아도 자동으로 0을 가짐(전역)
- 프로그램이 시작되면 포기화는 딱 한번만 수행(전역)
- 중괄호 내에서 사용(정적)
- 정적 지역 변수의 메모리 생성 시점 : 중괄호 내에서 초기화 될 떄
- 정적 지역 변수의 메모리 소멸 시점 : 프로그램이 종료될 때
4. 외부변수
: 현재 파일이 아닌 외부 파일에 선언된 변수를 참조하여 사용하는 변수
- 자료형 앞에 extern키워드를 붙임
* 특정 전역 변수는 외부에서 참조하지 못하게 해야 한다면 static키워드를 이용하면 된다.
5. 레지스터변수
: CPU내부의 임시 기억 장소 즉, 레지스터에 변수를 할당하여 값을 저장하는 변수.
- 처리속도가 빠르다.
*CPU내부의 임시 기억 장소인 레지스터는 cpu마다 수가 제한되어 있어서 레지스터 변수를 선언하더라도 cpu내부의 레지스터가 모자라면 지역변수(ram)로 할당된다. -> 코드최적화
9.4.6 코드영역 , 스택영역 , 데이터 영역 , 힙 영역
- 실행 중인 프로그램을 프로세스라고 부른다. 프로세스는 메모리 공간을 크게 코드영역,스택영역,데이터영역,힙영역으로 나누어 사용한다. 이러한 영역들을 기억부류(storage class)라고 한다.
1. 코드 영역 : 프로그램의 실행코드 또는 함수들이 저장되는 영역
2. 스택 영역 : 매개변수 및 중괄호(블록) 내부에 정의된 변수들이 저장되는 영역
3. 데이터 영역 : 전역변수와 정적변수들이 저장되는 영역
4. 힙 영역 : 동적으로 메모리 할당하는 변수들이 저장되는 영역
9.5 재귀 함수
: 함수 내에서 자기 자신을 호출하는 함수
- 문제점 : 시간과 메모리 공간의 효율이 저하 -> 개발에 신중해야 함
'공부해요 > C' 카테고리의 다른 글
[ 열혈강의 C언어본색 ] Part2 제2장 다차원 배열이란 무엇인가 (0) | 2014.08.14 |
---|---|
[ 열혈강의 C언어본색 ] Part2 제1장 1차원 배열이란 무엇인가 (0) | 2014.08.14 |
[ 열혈강의 C언어본색 ] Part1 제8장 조건문이란 무엇인가 (0) | 2014.08.14 |
[ 열혈강의 C언어본색 ] Part1 제7장 반복문이란 무엇인가 (0) | 2014.08.14 |
[ 열혈강의 C언어본색 ] Part1 제6장 자료형이란 무엇인가 (0) | 2014.08.14 |