본문 바로가기

C Langauage

Chapter 7. 함수(Function)

Chapter 7. 함수(Function)
1. 함수

 - 함수
  · 프로그램에서 자주 사용되는 코드 블록을 따로 한 번만 만들어 두고 필요할 때마다 불러서 사용하는 기능
 - 함수의 정의

 ReturnType FuncName(DataType Var1, DataType Var2, ……, DataType VarN) ━ Header
 {                        ━┓
         Order;        .      ┃ 
                           .Body
         return value;          ┃
 }                       . ━┛

  · 함수를 정의 위치

  ◦ main 함수 전
  ◦ main 함수 전에 함수를 선언하고 main 함수 정의를 마치고 정의
  · 리턴타입(ReturnType)
  ◦ 기본 데이터형(int char float 등)과 void를 사용하며 리턴 시 돌려주는 값의 데이터형 사용
  ◦ return형이 void 이외에는 모두 return 값을 지정해줘야 하고 void는 return 값을 생략할 수 있다.
  ◦ 리턴 값(return value)은 없거나 반드시 하나의 값만 리턴할 수 있다.
  · 함수명(FuncName)
  ◦ 함수명은 의미 있는 이름으로 정해 차후에 판단이 용이하게 하고 변수명을 정하는 규칙과 같다.
  · 함수의 매개변수(DataType Var1…VarN)
  ◦ 매개변수는 함수의 기능을 수행하는데 필요한 값을 넘겨주기 위한 변수를 함수 이름 다음에 () 안에 데이터형과 이름을 지정한다.
  ◦ 함수의 매개변수에는 개수 제한이 없고 void나 아무것도 적지 않아 매개변수를 지정하지 않을 수도 있다.
  · 함수의 헤더와 바디
  ◦ 함수의 헤더 : 함수의 리턴형, 함수의 이름, 매개변수 정보를 적는 부분
  ◦ 함수의 바디 : 중괄호({}) 안에 함수가 처리할 내용을 적는 부분
 - 함수의 선언

 ReturnType FuncName(DataType Var1, DataType Var2, ……, DataType VarN);

  · 컴파일러에게 함수의 정보를 알려주는 역할을 하며 그 정보를 이용해 컴파일러가 함수 사용에 관련된 오류를 검사한다.
  · 함수 선언의 위치
  ◦ main 함수 전
  ◦ 해당 함수 이전
  · 함수를 선언할 때는 함수의 정의 헤더부분과 동일하지만 세미콜론(;)을 끝에 붙여줘야 한다.
  · 함수 선언 위치에 함수 정의를 한다면 함수 선언은 생략가능하다.
 - 함수의 호출

 FuncName(DataType Var1, DataType Var2, ……, DataType VarN);

  · 함수를 호출할 때는 함수의 이름을 쓰고 괄호(())안에 함수의 매개변수를 써준다.
  · 매개변수가 필요 없는 함수라면 괄호(())안을 비우고 호출한다.
  · 함수는 중첩해 사용할 수 있다.
  · 함수를 호출해 사용할 때 리턴 값을 변수에 저장하지 않는다면 함수가 변수자체에 영향을 주지 못하므로 함수로 변수 값을 바꾸고 싶다면 변수 값을 함수로 초기화 해줘야한다.
 - 함수의 유형
  · 함수는 매개변수와 리턴 값 유무에 따른 4가지 유형

유형

 매개변수

 리턴값

유형1

O

O

유형2

O

X

유형3

X

O

유형4

X

X

 

2. 기억클래스
 - 변수는 데이터형과 기억클래스를 가지고 있다.
 - 데이터형(Data Type) : 변수의 크기와 어떤 타입의 데이터를 처리할 것인가를 결정한다.
 - 기억클래스(Storage Class) : 변수가 메모리상에서 사용되는 유효범위와 초기화 방법을 결정한다.
 - 변수는 기억클래스에 따라 지역변수, 전역변수, 정적변수로 나뉜다.

기억부류

종류

내용

auto

지역변수

 지역변수의 Default 값(선언하지 않아도 된다.)

register

 변수를 메모리에 할당하지 않고 레지스터에 할당한다. 따라서 변수에 좀 더 빠르게 접근할 수 있다.

extern

전역변수

 실제로 전역변수가 선언된 위치에 관계없이 전역변수를 사용할 수 있다.

static

정적

지역 변수

 정적 지역 변수가 되고 선언된 함수 안에서만 사용된다.

정적

전역 변수

 정적 전역 변수로 지정되고 전역변수의 사용범위를 제한한다.

 - 지역 변수

 (auto/register) 데이터형 변수명;

  · 함수 내에서 선언된 변수로 해당 함수 내에서만 접근가능하다.
  · 선언 방법 : 함수 내에 선언하거나 변수 앞에 auto 또는 register를 써주는 방법이 있다.
  · 함수가 종료되면 메모리상에서 소멸된다.
  · 매개변수도 지역변수에 포함된다.
  · 초기화하지 않으면 쓰레기 값을 갖는다.
 - 전역 변수

 (extern) 데이터형 변수명;

  · 함수 외에서 선언된 변수로 프로그램 전체영역 어디서든 접근가능하다.
  · 선언 방법 : 함수 외에 선언하거나 변수 앞에 extern을 써주는 방법이 있다.
  · 프로그램의 시작과 동시에 메모리 공간에 할당되며 종료 시까지 존재한다.
  · 별도의 값으로 초기화하지 않으면 0으로 초기화된다.
 - 정적 변수

 static 데이터형 변수명;

  · static을 붙여 선언된 변수를 말하고 선언 위치에 따라 지역 변수 또는 전역 변수의 특징을 가질 수 있다.
  · 정적 지역 변수 : 선언된 함수 안에서만 사용할 수 있다.
  · 정적 전역 변수 : 프로그램 실행 시 메모리가 단 한번 할당되며 프로그램이 종료되면 메모리에서 소멸된다.
 - 각 변수에 따른 특징

구분

일반 지역 변수

정적 지역 변수

전역 변수

정적 전역 변수

선언 위치

함수 안

함수 안

함수 밖

함수 밖

생성 시점

변수 선언 시

프로그램 시작 시

프로그램 시작 시

프로그램 시작 시

소멸 시점

함수가 리턴 시

프로그램 종료 시

프로그램 종료 시

프로그램 종료 시

사용 범위

함수 안

함수 안

프로그램 전체

선언된 소스 파일

초기화하지 않았을 때

쓰레기 값

0으로 초기화

0으로 초기화

0으로 초기화

 


'C Langauage' 카테고리의 다른 글

Chapter 9. 문자열(String)  (0) 2015.08.05
Chapter 8. 포인터(Pointer)  (0) 2015.08.05
Chapter 6. 배열(Array)과 문자열(String)  (0) 2015.08.05
Chapter 5. 제어문  (0) 2015.08.05
Chapter 4. 연산자(Operator)  (0) 2015.08.05