Search

[C 프로그래밍] 함수와 기억클래스

Posts
제목
Tag
작성일

함수의 개념

특정 작업(기능) 을 수행하도록 설계된 독립적인 코드 블록
프로그램 내에서 필요한 곳에서 호출(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)
함수 호출에 필요한 정보를 제공하는 문장
함수의 반환형, 함수 명칭, 함수에 전달하는 매개변수의 자료형 → 함수 헤더의 내용