[C언어/C++] 함수(Function) 사용법 & 예제
- Language/C , C++ , C#
- 2021. 1. 13.
함수(Function)란?
함수는 특정 작업을 수행하는 코드의 집합이라고 정의할 수 있습니다. 반복적으로 수행되는 코드들을 함수로 만들어 사용하면 코드의 재활용성이 높아집니다. 기능들을 분류하여 다양한 각각의 함수로 만들어 사용할 수도 있고 함수 내부에서 또 다른 함수를 호출 할 수도 있는 등의 다양한 이유로 인해 함수를 사용하면 복잡한 기능도 비교적 쉽게 구현할 수 있으며, 구조화 프로그램에 있어 매우 중요한 개념입니다.
함수(Function)의 종류
함수의 종류에는 사용자 정의 함수와 라이브러리 함수가 있습니다. 먼저 사용자 정의 함수는 사용자가 구현하고 싶은 기능을 구현하는 것이며 라이브러리 함수는 우리가 흔히 써오던 printf(), scanf() 같은 함수인데 헤더파일안에 정의되어 있어 원하는 라이브러리 함수를 사용하고 싶다면 헤더파일을 불러와 사용하시면 됩니다. 이번 포스팅에서는 사용자 정의 함수에 대해 설명하도록 하겠습니다.
함수(Function)의 정의 및 사용
우리가 코드를 작성하는 main도 함수의 한 종류입니다. 함수는 윗 그림과 같이 반환 자료형, 함수의 이름, 인자값으로 나뉘어집니다. 반환의 형태란 메인함수의 사용에서 return 0; 처럼 함수를 종료하면서 반환하는 값을 의미합니다. 그리고 함수 이름은 main 함수의 경우 프로그램 실행시 가장 먼저 실행되는 부분이므로 꼭 필요한 함수로 변경할 수 없지만 사용자 정의함수의 경우에는 일반적인 명명규칙에 따라 사용자가 지정해줄 수 있습니다. 인자값은 다양한 자료값을 정의된 함수로 값을 넘겨줄때 사용합니다. 인자값으로 void는 생략이 가능하며 main 함수에도 사실 괄호안의 void가 생략된 형태입니다.
함수(Function) 사용의 예시
#include <stdio.h>
void print() {
printf("Hello World\n");
}
int add(int x, int y) {
return x + y; //int형 반환
}
int main() {
int num1 = 10;
int num2 = 20;
print(); //print 함수 호출
int result = add(num1, num2); //add함수 호출
printf("%d", result);
}
인자값으로 배열의 주소 받기
#include<stdio.h>
int my_strlen(char *temp ) { //char temp[] = 배열복사
int count = 0;
for (int i = 0; i < 1000; i++) {
if (temp[i] == '\0') {
return count;
}
count++;
}
}
int main() {
char temp[] = "hello world";
printf("temp size : %d\n", my_strlen(temp));
return 0;
}
C언어/C++의 포인터 변수를 활용하여 배열의 주소를 매개변수로 보낼때 많이들 햇깔려하시는것 같기에 정리합니다. 위와 같이 배열을 넣고 함수에서 포인터로 받으시면 됩니다.
반환값으로 배열의 주소 리턴하기
#include<stdio.h>
char* my_strok(char *temp,int start, int end) {
char result[1000] = { 0, };
for (int i = 0; i <= (end-start); i++) {
result[i] = temp[start++];
}
return result;
}
int main() {
char temp[] = "hello world";
char *result = my_strok(temp, 1, 3);
printf("cut str : %s\n", result);
return 0;
}
배열의 주소를 리턴할때도 함수에 배열의 포인터를 리턴한다고 명시해두고 배열을 그대로 리턴하시면 됩니다.
'Language > C , C++ , C#' 카테고리의 다른 글
[C언어/C++] 구조체 사용법 & 예제 총정리 (0) | 2021.01.15 |
---|---|
[C언어/C++] 함수 포인터 사용법 & 예제 총정리 (2) | 2021.01.14 |
[C언어/C++] 포인터(Pointer) 사용법 & 예제 총정리 (2) | 2021.01.12 |
[C언어/C++] 연산자 우선순위에 대하여 (0) | 2021.01.11 |