Table
함수의 개념
•
특정 작업(기능) 을 수행하도록 설계된 독립적인 코드 블록
•
프로그램 내에서 필요한 곳에서 호출(call) 하여 사용
•
매개변수(parameter) 를 통해 데이터 전달
•
실행 후 return 문으로 결과를 반환하거나 복귀
C 프로그램은 함수 단위로 구성됨 (main()도 함수)
함수의 장단점
항목 | 내용 |
장점 | - 코드 재사용성 향상
- 프로그램 구조화
- 유지보수 용이 |
단점 | - 함수 호출/복귀 과정에서 약간의 부하 발생 |
함수의 유형
구분 | 설명 | 예시 |
표준 함수 | C 언어에서 기본 제공되는 함수 | printf(), scanf(), sqrt() |
사용자 정의 함수 | 사용자가 직접 만든 기능 수행 함수 | sum(), minimum() 등 |
표준 함수 (Standard Function)
•
C 언어에서 기본 기능을 제공하기 위해 미리 만들어 둔 함수 집합
•
표준 라이브러리 형태로 제공
•
각 함수의 원형을 기능별로 헤더파일에 제공
◦
함수의 원형(prototype): 함수를 사용하는 데 필요한 사항을 미리 선언하는 문장 (함수의 이름, 매개변수, 반환하는 값의 자료형 등)
◦
필요한 표준함수의 원형이 선언되어 있는 헤더파일을 미리 포함(#include)해야 함
주요 표준함수
사용 예시 1
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main() {
double x = 12.34;
int i = -5, j = 2;
printf("abs(-5) = %d\n", abs(i));
printf("ceil(12.34) = %d\n", (int)ceil(x));
printf("floor(12.34) = %d\n", (int)floor(x));
printf("sqrt(2) = %f\n", sqrt(j));
printf("pow(4, 2) = %f\n", pow(4, j));
}
SQL
복사
출력 결과
abs(-5) = 5
ceil(12.34) = 13
floor(12.34) = 12
sqrt(2) = 1.414214
pow(4,2) = 16
SQL
복사
예시 2
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
int alp = 0, num = 0, etc = 0;
char s[20];
printf("문자 입력: ");
scanf("%s", s);
for (int i = 0; i < strlen(s); i++) {
if (isalpha(s[i])) alp++;
else if (isdigit(s[i])) num++;
else etc++;
}
printf("알파벳 = %d\n숫자 = %d\n기타 = %d\n", alp, num, etc);
}
SQL
복사
입력 예시: KNOU1234567890-#*?$
출력
알파벳 = 4
숫자 = 10
기타 = 5
SQL
복사
사용자 정의 함수 (User-Defined Function)
함수 정의의 기본 형태
retType functionName(parameterList) {
// 지역 변수 선언
statements;
return expr; // retType이 void가 아니면 필수
}
C
복사
•
retType: 반환 자료형 (int, double, char, void …)
•
functionName: 의미 있는 이름으로!
•
parameterList: type name의 나열, 없으면 void 또는 빈 괄호(void 권장)
•
return: 호출 지점으로 복귀 + 값 반환(필요 시)
함수 헤더
int sum(int a, int b) {
// 1) 반환형: int
// 2) 함수명: sum
// 3) 매개변수: (int a, int b) → 호출 시 실제 인자 값이 복사됨
return a + b;
}
SQL
복사
•
함수명: 역할을 드러내는 이름이 유지보수에 유리
•
매개변수: 함수 안에서는 지역 변수처럼 사용
•
반환 자료형: C99부터 생략 불가. return 값과 호환되어야 함
호출과 실행 흐름
int main(void) {
int x, y;
scanf("%d %d", &x, &y); // 실 매개변수
int c = sum(x, y); // sum의 형식 매개변수 (a, b)로 값 복사
printf("%d\n", c);
}
SQL
복사
•
실 매개변수(actual): 호출하는 쪽에서 전달하는 값
•
형식 매개변수(formal): 함수 정의에 적힌 변수
•
C는 기본적으로 “값에 의한 호출(pass-by-value)”
◦
함수 안에서 매개변수를 바꿔도 호출자 변수에는 영향 없음
◦
호출자 값을 바꾸려면 포인터(주소) 전달 사용
결과값 반환
•
함수 실행의 종료
◦
함수의 마지막 문장 실행
◦
return 명령 실행
•
return 문을 이용한 결과값의 반환
◦
함수를 끝내고 제어와 함수 수행결과를 호출 함수로 넘김
◦
exprret은 함수 헤더에 선언한 반환 자료형과 일치하거나 묵시적 자료형 변환을 할 수 있어야 함
◦
void형 함수는 반환식(exprret)이 없음
선언 순서
•
모든 명칭은 사용되기 전에 미리 선언해야 함
•
피호출 함수가 호출 위치의 뒤에 정의되었거나 다른 파일에 정의된 경우 함수 호출에 필요한 정보를 미리 알려야 함
함수의 원형(prototype)
•
함수 호출에 필요한 정보를 제공하는 문장
•
함수의 반환형, 함수 명칭, 함수에 전달하는 매개변수의 자료형
→ 함수 헤더의 내용
