Chapter 7. 함수(Function)
1. 함수
- 함수
· 프로그램에서 자주 사용되는 코드 블록을 따로 한 번만 만들어 두고 필요할 때마다 불러서 사용하는 기능
- 함수의 정의
ReturnType FuncName(DataType Var1, DataType Var2, ……, DataType VarN) ━ Header |
· 함수를 정의 위치
◦ 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 |