JUST GO
[C] 함수 본문
함수
- 특정 기능을 제공하는 일련의 코드를 묶어서 이름을 붙인 것
- 일종의 블랙 박스
- 전달하는 인자의 의미와 호출 결과만 알면 된다.
함수의 필요성
함수를 사용할 때의 장점
- 코드가 중복되지 않으므로 간결하고 알아보기 쉽다.
- 한 번 작성해둔 코드를 여러 번 사용하므로 코드의 재사용성이 높다.
- 기능 위주로 함수를 작성해서 사용하므로 프로그램의 모듈화가 증대된다.
- 함수 코드를 수정하더라도 함수를 호출하는 부분은 수정할 필요가 없으므로 프로그램을 유지 보수하기 쉽다.
함수의 종류
함수의 요건
- 함수의 정의(definition) : 함수가 수행할 내용을 기술
- 함수의 호출(call) : 이미 정의된 함수를 사용
- 함수의 선언(declaration) : 사용될 함수에 대한 정보를 미리 제공
함수의 정의
함수의 리턴형
- 함수가 처리 결과로 리턴하는 값의 데이터형
- 함수가 처리 결과로 리턴하는 값이 없을 때는 void라고 적어준다.
- 리턴형을 생략하면, int형을 리턴하는 함수로 간주된다.
- 함수는 반드시 하나의 값만 리턴할 수 있다.
함수의 이름
- 어떤 일을 하는 함수인지 명확하게 알 수 있는 이름을 사용한다.
- 식별자를 만드는 규칙에 따라서 정해야 한다.
- 일관성 있는 이름을 사용하는 것이 좋다.
- 서로 다른 함수가 같은 이름을 사용할 수 없다.
- 명명 규칙(Naming Convention)
식별자로 사용되는 이름을 정할 때 적용되는 규칙
프로그래머가 직접 자신만의 명명 규칙을 정하고 따르면 코드의 가독성을 높일 수 있다.
매개변수 목록
- 매개변수(parameter)
함수를 호출한 곳에서 함수 안으로 전달되는 값을 보관하기 위한 변수
- 인자, 인수(argument)
함수를 호출할 때, 실제로 전달되는 값
- 매개변수의 개수에는 제한이 없다.
매개변수가 없을 때는 void를 써주는데, 이때의 void는 생략할 수 있다.
- 함수를 정의할 때, 매개변수의 데이터형을 생략하거나 매개변수의 이름을 생략하면 컴파일 에러가 발생한다.
함수의 내용
- 함수의 정의는 헤더(header)와 바디(body)로 구성된다.
함수 예시
#include <iostream>
void draw_line(char, int); // 함수 선언부
int main(void){
draw_line('*',5); // 함수 호출부
return 0;
}
void draw_line(char ch, int len) // 함수 정의부
{
int i; // 지역변수
for(i=0;i<len;i++)
printf("%c", ch);
printf("\n");
}
리턴 값과 매개변수가 없는 함수
- 리턴형과 매개변수 목록을 void로 지정한다.
- void형의 함수를 호출하면 정해진 코드를 수행하고, 함수의 끝을 만나면 리턴한다.
리턴 값은 없고 매개변수만 있는 함수
리턴 값과 매개변수가 있는 함수
- 리턴형이 있는 함수에서 return문을 생략하면 안된다.
기존의 코드로부터 함수를 정의하는 과정
처음부터 함수를 정의하는 과정
함수의 호출
- 이미 만들어진 함수를 불러 쓰는 것
- 함수 이름 다음에 ( )를 쓰고, ( ) 안에 함수의 인자를 써준다.
- 함수를 호출할 때 넘겨준 인자가 매개변수로 전달된다.
매개변수가 있는 print sum 함수의 사용
get factorial 함수의 사용
#include <stdio.h>
int get_factorial(int num)
{
int i;
int result = 1;
for (i = 1; i <= num; i++) // num!을 구한다
result *= i;
return result; // num! 값을 리턴한다.
}
int main(void)
{
int i;
int fact;
for (i = 1; i <= 5; i++)
{
fact = get_factorial(i); // get_factorial(i)의 리턴 값을 저장한다.
printf("%2d! = %3d\n", i, fact);
}
get_factorial(5); // 리턴 값을 어디에도 이용하지 않는다.
return 0;
}
인자 전달 과정의 의미
get max 함수의 사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int get_max(int a, int b, int c)
{
int max = a > b ? a : b;
max = c > max ? c : max;
return max;
}
int main(void)
{
int x, y, z;
while (1)
{
printf("정수 3개를 입력하세요 (0 0 0 입력 시 종료): ");
scanf("%d %d %d", &x, &y, &z);
if (x == 0 && y == 0 && z == 0)
break;
printf("최대값: %d\n", get_max(x, y, z));
}
return 0;
}
함수 선언문의 위치
지역변수와 전역변수
- 지역 변수(local variable) : 함수나 블록 안에 선언되는 변수
- 전역 변수(global variable) : 함수 밖에 선언되는 변수
전역 변수의 선언 및 사용
#include <stdio.h>
void print_count(void);
void increment(void);
void decrement(void);
int count; // 전역 변수 선언
int main()
{
int i;
count = 0;
print_count();
for (i = 0; i < 3; i++)
increment();
print_count();
for (i = 0; i < 3; i++)
decrement();
print_count();
}
void print_count(void) {
printf("count = %d\n", count);
}
void increment(void) {
count++;
}
void decrement(void) {
count--;
}
'C > 학습내용' 카테고리의 다른 글
[C] 포인터(2) (0) | 2022.10.06 |
---|---|
[C] 배열 (0) | 2022.10.06 |
[C] 반복문(2) (1) | 2022.10.05 |
[C] 반복문 (1) | 2022.10.05 |
[C] 제어문(switch문) (0) | 2022.10.05 |