프로그래밍에서 함수란 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합으로 정의할 수 있다. C프로그램은 이러한 함수들로 구성되며, 포함된 함수들을 사용하여 프로그램의 목적을 달성하게 된다.
<함수의 종류>
- 내장 함수 : C언어는 표준 라이브러리를 제공하는데, 많은 내장 함수를 제공한다. 내장 함수는 사용하기 전에 정의할 필요 없이 바로 사용할 수 있다. ex) printf(), scanf()
- 사용자 정의 함수 : 코딩하는 사람이 필요에 따라 직접 작성한 함수. 프로그램의 크기를 줄이고, 코드의 재사용성과 유지 보수성을 높인다. 이름처럼 사용자가 이름, 매개 변수, 반환 값 등을 포함하여 직접 정의한다. 사용자 정의 함수는 반환 값이 있는 함수와 없는 함수로 나뉜다.
반환 값이 있는 함수는 함수 처리 결과를 반환하여 함수를 호출한 부분에서 반환값을 변수에 저장해 사용할 수 있다.
반환 값이 없는 함수는 함수가 결과를 반환하지 않아서 처리한 결과를 호출한 함수에서 직접 사용해야 한다.
이 블로그는 사용자 정의 함수에 대해 작성하겠습니다.
<C언어에서 함수의 특징>
- 코드를 모듈화하고 함수 본문 내에서 작업을 수행한다. -> 프로그램을 더 작고 이해하기 쉽게 만들어 준다.
모듈화 : 어떤 시스템의 구성요소가 분리되고 재결합 할 수 있는 정도를 의미한다.
- 함수는 여러번 호출될 수 있는데, 이는 프로그램의 재사용성을 높인다.
- 인자를 전달할 수 있어 함수 본문에서 필요한 데이터를 전달할 수 있다.
- 값을 반환하여 함수를 호출하는 코드에서 반환값을 사용할 수 있도록 한다.
- 자체적으로 지역 변수를 가질 수 있으며, 지역 변수는 함수 본문에서 사용되는 변수를 다른 함수와 구분하여 사용할 수 있도록 한다.
- c언어에는 라이브러리 함수가 포함되어 있는데, 이들은 특정 작업을 수행하는 함수를 제공한다. 라이브러리 함수를 사용하면 코드 작성 시간을 단축할 수 있다.
<함수 정의법과 호출>
함수는 함수 이름으로 호출되며, 함수 정의에는 함수 이름, 매개 변수 목록, 반환 값 유형, 함수 본문이 포함된다.
함수가 호출되면 매개 변수를 전달하고 함수 내에서 작업을 수행한 후, 반환 값이 있으면 호출된 위치로 반환된다.
int add(int a, int b) {
int result;
result = a + b;
return result;
}
예를 들어 두 개의 정수를 더하는 함수를 정의합니다.
함수 이름 : add
매개 변수 목록 : "a", "b"
반환 값 유형 : int (정수형)
함수 본문 : 더하기 연산 후 결과를 반환
int sum = add(2, 3);
위에서 정의한 add 함수를 호출합니다.
add 함수는 매개 변수 2와 3을 전달 받고, 2와 3을 더한 결과인 5를 반환한다.
결과는 sum 변수에 저장된다.
<함수의 매개 변수와 인수>
매개 변수 : 함수 정의에서 선언된 변수. 함수 본문에서 사용되며, 함수가 호출될 때 인수로 전달되는 값을 저장한다.
함수 정의에서 함수 이름 뒤에 나열된다.
인수 : 매개 변수를 선언하면 함수가 호출될 때 인수를 전달할 수 있으며, 인수는 매개 변수에 저장된다.
함수의 매개 변수와 인수는 데이터의 유형, 순서, 개수가 일치해야 한다. 만약 불일치할 경우 컴파일 오류가 발생한다.
<지역 변수와 전역 변수>
지역변수 : 함수 내부에서 선언된 변수로, 해당 함수 내에서만 사용이 가능하다. 함수가 호출될 때 생성되며, 함수가 종료되면 소멸된다. 함수 외부에서는 접근할 수 없으며, 동일한 이름의 지역 변수가 여러 함수에서 선언될 수 있다.
전역변수 : 함수 외부에서 선언된 변수로, 프로그램 전체에서 사용된다. 프로그램 시작과 동시에 생성되고 종료될 때까지 메모리에 유지된다. 함수 내부에서도 접근할 수 있고, 동일한 이름의 변수가 여러 파일에서 선언될 경우 각 파일에서 독립적인 변수가 된다.
전역변수는 함수 내부에서도 접근할 수 있지만, 함수의 의도와 맞지 않은 경우가 많다. 어디서든지 접근이 가능하여 의도치 않은 부작용이 발생하기 쉽다. 따라서 사용시 신중하게 고려해야 한다.
C언어 재귀함수와 피보나치 수열 (0) | 2023.04.16 |
---|---|
백준 1402번 아무래도이문제는A번난이도인것같다 c (0) | 2023.04.09 |
백준 1598번 꼬리를 무는 숫자 나열 c (0) | 2023.04.09 |
백준 8958번 OX퀴즈 c (0) | 2023.04.09 |
백준 2609번 최대공약수와 최소공배수 c (0) | 2023.04.09 |