공부해요/C

[ 열혈강의 C언어본색 ] Part1 제9장 함수란 무엇인가

예쁜꽃이피었으면 2014. 8. 14. 16:04

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언어본색 Part1 제9장 함수란 무엇인가.docx


반응형