8. 함수
8.1. 함수 개요
1) C언어에서 함수
- 어떤 특정한 일을 수행하는 독립적인 단위
- 함수의 예시: printf(), scanf(), main()
2) 함수의 구성
- 함수 정의부: 함수를 구현하는 부분
- 함수 호출부: 함수의 기능을 이용하는 부분
8.2. 함수 정의
1) 함수 정의
- 함수가 수행해야 할 기능 명세하기
- 구문
반환형 함수이름 (인자선언1, 인자선언2, ...)
{
// 함수 몸체
// 함수의 수행코드
return 문;
}
2) 함수 정의 요소
>> 함수이름
- 함수이름 규칙은 변수명 규칙과 동일
- 의미있는 이름 사용 권장
>> 함수인자 or 매개변수
- 함수의 입력 데이터를 나타내는 변수들
- 인자가 다수인 경우 콤마로 구분
- 인자가 없더라도 소괄호는 반드시 필요 (또는 Void 작성)
>> 반환형(return Type)
- 함수가 수행된 후에 반환하는 결과의 자료형
- 아무 결과도 반환하지 않으면 자료형에 void를 씀 (이 경우 return문이 필요없음)
>> 함수 몸체(body)
- 함수가 수행해야 할 작업을 {} 안에 명세
- 함수는 제어 흐름에 따라 수행: 맨 마지막 문장까지 수행되거나 return 문을 만나면 종료
>> return 문
- 함수를 종료하고 함수의 결과를 반환하는 역할
- 반환형이 void인 경우 보통 return문을 사용하지 않지만, 중간에 함수를 종료시키기 위해 사용하기도 함
8.3. 함수 호출과 반환
- 함수를 불필요하게 여러번 수행하지 않도록 유의
- 함수구성은 일을 독립적인 단위로 어떻게 나누느냐에 따라 달라짐
- 함수는 코드 작성의 효율성과 가독성을 높여줌
8.4. 함수와 변수의 종류
1) 함수와 변수
- 함수는 특정한 일을 하는 독립적인 단위
- 함수 기능 뿐만 아니라 함수에서 사용하는 변수에도 독립성이 적용
>> 즉, 함수에서 선언된 변수들은 그 함수에서만 유효
- 경우에 따라서 특정 함수에만 국한되지 않고, 함수와 무관하게 사용되는 변수가 필요
2) 변수 종류
(1) 지역 변수
- 선언 위치: 함수 내에서 선언
- 유효 범위: 변수를 선언한 함수 내에서만 (지역적으로) 유효
- 변수의 지속시간: 함수 호출 시 생성, 함수 종료 시 소멸
>>함수 호출과 동시에 자동으로 생성되고, 함수가 종료되면 자동으로 소멸되어 자동변수라고도 함
- 함수의 형식 인자도 지역변수임
(2) 전역 변수
- 선언 위치: 함수 밖에서 선언
- 유효 범위: 프로그램 내 어디서든 사용 가능
- 변수의 지속시간: 프로그램 실행 시 생성, 프로그램 종료 시 소멸
- 자동으로 0으로 초기화(그러나 모든 변수는 명시적으로 초기화 하는 습관을 가지자)
- 동일한 이름의 전역 변수와 지역 변수가 있는 경우 지역 변수가 우선된다.
- 전역 변수는 함수 사이의 데이터 전달을 위한 또하나의 수단
>> 그러나 함수의 독립성을 해칠 수 있어 신중하게 사용
(3) 정적 변수
- static 키워드 사용
>>
static int x = 0;
- 선언 위치: 함수 내 선언
- 유효 범위: 선언한 함수 내부
>> 지역 변수와 공통점: 변수의 지속시간. 프로그램 실행 시 생성, 프로그램 종료 시 소멸
>> 전역 변수와 공통점: 프로그램 실행 전체 과정 동안 딱 한번만 생성되고 초기화
8.5 함수에 배열 전달
1) 배열의 개별 원소 전달
- 함수의 인자에서 사용된 배열 원소는 수식의 일부일 뿐
- 배열 원소는 일반 변수와 동일하게 취급
- 형식 인자에서 그냥 변수로 명시
2) 배열 전체 전달
- 형식 인자에서 배열로 명시
- 다만, 형식인자에서 배열 크기 명시해도 의미 없음 >> 생략
- 만약, 배열 크기가 필요한 경우 별도의 함수 인자로 전달
- 배열 전체가 전달된 경우, 호출된 함수에서 배열의 값을 바꾸면, 호출한 원래 함수의 배열 값도 바뀜
- 다차원 배열인 경우, 2차원 이상부턴 배열 크기 명시해야함
8.6 함수와 라이브러리
1) 라이브러리
- 함수를 구현해 모아 놓은 것
- 필요 시 함수를 호출하여 사용
2) 표준 라이브러리
- C언어에서 정해놓은 표준 함수들로 구성: printf(), scanf() 등
3) 표준함수 사용
- 함수의 형태와 기능만 알고 있으면 활용할 수 있음
- 어떻게 구현되어 있는지는 몰라도 됨
- 호출하기 전에 함수 원형이 선언되어 있어야 함
- #include문으로 헤더파일을 소스코드에 포함시킴
- 헤더 파일: 확장자.h의 형태로 이루어짐. <stdio.h>등
4) 자주 사용되는 C 표준 헤더 파일 및 표준 함수
- <stdio.h>: 입력, 출력, 파일
>> printf(), scanf(), putc(), getc(), fopen() 등
- <stdlib.h>: 숫자 변환, 동적 할당
>> atoi(), rand(), srand(), malloc(), free() 등
- <ctype.h>: 문자 검사 및 변환
>> Isalnum(), isalpha(), islower(), topper() 등
- <math.h>: 수학 함수
>> sin(), asin(), exp(), log(), pow(), sqrt(), abs()등
- <time.h>: 시간 처리
>> clock(), time(), difftime() 등
- <string.h>: 문자열, 메모리 블록
>> strcpy(), strcat(), strcmp(), strlen(), memcpy() 등
'프로그래밍 언어 개념정리 > C언어 개념 정리' 카테고리의 다른 글
C언어 개념 정리: 포인터 (0) | 2024.11.12 |
---|---|
C언어 개념 정리: 디버깅 기초 (1) | 2024.11.11 |
C언어 개념 정리: 배열 (0) | 2024.11.09 |
C언어 개념 정리: 반복문 (0) | 2024.11.08 |
C언어 개념 정리: 조건문 (0) | 2024.11.07 |