본문 바로가기
C/Definition&Grammar

[C] 함수

by 꾸압 2021. 3. 5.

<용어 정리>

- 함수 = 서브루틴 = 프로시저 등으로 불림.

- 특정한 작업을 수행하는 독립 부분.

# 반환값(return)이 있는 경우 ==> 함수

# 반환값이 없는 경우 ==> 프로시저

- 인수(argument) : 실인수, 실 매개변수 (main 함수 내부의 변수)

- 매개 변수(parameter) : 가(짜)인수, 형식 매개변수, (main 함수 외부의 변수)

 

< 함수 장점 >

1) 코드 중복 방지

2) 한번 작성된 함수는 여러번 재사용 가능

3) 함수를 사용하면 전체 프로그램을 모듈로 나눌 수 있어 개발 과정이 쉬워지고, 보다 체계성을 갖추어 유지보수가 편해짐

 

[예제1 : 사각형 출력 - 함수 이해]

#include <stdio.h>
#include <stdlib.h>

// 총 3개의 함수 존재  

void print_start(){ 	// (1)print_start 함수 : 사용자 정의 함수 
	int i; 
	
	for(i=1; i<26; i++){
		printf("*");
		if((i%5) == 0){
			printf("\n");	// (2)printf 함수 : 라이브러리 함수 
		}
	}
}

int main(){	//(3)main 함수 : 라이브러리에 가까운 사용자 정의 함수 
	
	print_start();
	
	return 0;
}

 

 

 

< Return >

1) 반환 타입이 void 형태라도 return 이 가능하다.

2) 실행을 멈추고 호출한 곳으로 되돌아간다.

 

[예제2 : 사각형 출력 - return 이해]

#include <stdio.h>  

void print_start(void){  
	int i; 
	
	for(i=1; i<26; i++){
		printf("*");
		if((i%5) == 0){
			printf("\n");
			
			return;	//함수에서 for문의 break 같은 역할을 한다.
		}
	}
}

int main(){		
	
	print_start();
	
	return 0;
}

 

<함수 특징>

- 함수 길이에 제한은 없다. 단, 너무 길어져 해석이 어려운건 지양하기에 최대 30줄 이하로 작성함이 좋다.

- 함수는 기본 원칙은 한 가지 작업만 하는 것이다. (ex) 함수 하나에서 max 값과 min 값을 동시에 구하기 등 X

 

[예제3 : 곱셉 연산 - 함수의 원형 이해]

#include <stdio.h>

int square(int n){
	return n*n;
}

// 	int suare(int n){
//		int area = n*n;
//		return area;
//	}  이런 형식도 사용 가능 

int main(){
	int res;
	res = square(5);
	printf("%d", res);
	
	return 0;
}

 

<함수 원형>

[예제4 : 곱셉 연산 - 함수의 원형 이해]

#include <stdio.h>

int square(int, int);	//함수 원형 : 컴파일 할 때 main 함수가 square 함수를 인식시키기 위해 존재 

int main(){	//자료형과 갯수가 서로 일치하는지 확인 
	
	int res;
	res = square(5, 7);
	printf("%d", res);
	
	return 0;
}

int square(int n, int m){	
	int area = n*m;
	return area;
}

함수 원형을 쓰는 이유 :

square 함수를 굳이 main 함수 아래에 둔 이유는 코드가 길어질 경우 main 함수가 핵심임에도 너무 아래에 있으면 찾기 어렵기 때문에 위로 올려야 함.

문제는 C언어가 절차 지향형(위에서 부터 내려감)이라 위에서 부터 코드를 인식하기에 아래로 내려간 square 함수를 인식하려면 '함수 원형'이 main 함수 위에 존재해야 한다. 

 

 

 

'C > Definition&Grammar' 카테고리의 다른 글

[C] C 라이브러리  (0) 2021.03.09
[C] 표준 라이브러리 함수  (0) 2021.03.08
[C] 스트림 (Stream)  (0) 2021.03.08
[C] 변수  (0) 2021.03.08

댓글