본문 바로가기
프로그래밍/C programming

C언어 함수 기초 사용자 정의 함수, 함수정의, 리턴, 매개변수

by 졸린이 2020. 8. 14.
반응형

 

C언어 함수 기초 사용자 정의 함수, 함수정의, 리턴, 매개변수

 

C언어뿐만 아니라 java, python, c++ 등등... 여러 가지 프로그래밍 언어를 공부를 할 때 필수적으로 나오는 게 바로 함수이다.

 

우리가 함수(function)라는 단어를 처음 접할때가 아마... 중학생이었나?? 뭐 대충 그랬던 거 같다.

 

그때 배운게 y=f(x) 이건대 대충 비슷한 의미라 볼 수 있겠다.

 

c언어는 기본적으로 main()함수를 가지고 있고 표준 함수와 사용자가 직접 만들어 사용하는 사용자 정의 함수가 있다.

 


 

표준함수

표준 함수는 컴파일러에 의해 기본적으로 제공되는 함수를 말하는데 기본적으로 c언어에서는 입력과 출력을 해주는 scanf(), printf()가 있다.

 

표준 함수를 사용하기 위해서는 표준 헤더 파일을 작성해야 되는데 그것이 c언어 작성할 때 맨 위에 작성하는

 

#include <stdio.h>이다.. h의 형식으로 정의되어 있고 stdio.h는 앞서 말한 입출력 함수를 제공한다.

 

또 난수 관련 함수인 rand(), srand()는 stdlib.h에 포함되어 있고 문자열 함수는 string.h 에 포함되어 있다.

 

사용자 정의 함수. 함수의 형식

사용자 정의 함수는 사용자가 직접 작성해서 사용하는 함수이다.

 

함수의 형식은 main()에서 호출하기 전에 정의되어 있거나 혹은 프로토타입을 먼저 선언해 줘야 한다. 

 

예를 들어 function이라는 함수를 작성한다고 했을 때

 

void function() 	//함수 헤더
{
  본체;
}

main()
{
  fucntion();	 //함수호출
}

 

이렇게 함수가 먼저 작성되고 main함수가 작성되거나

 

void function(); 	//함수프로토타입선언
main()
{
  function();  	//함수호출
}
void function() 	//함수헤더
{
 본체;
}

 

이렇게 프로토타입으로 먼저 선언을 해줘야 한다. 즉 main()에서 호출하기 전에 정의되어 있거나 선언되어 있어야 오류가 나지 않는다. 

 

프로토타입을 선언함으로써 함수의 정보를 컴파일러에게 미리 전달하는 것인데 두 가지 방법에서 본인 편한 대로 하면 된다.

 

하지만 함수가 많아지면 main() 위에 함수가 여러 개 쌓여서 코드 보기가 지저분해지기도 하고 함수를 일목요연하게 볼 수 있게 프로토타입을 선언을 하는 것을 추천한다.

 

함수 정의와 호출

자.. 그리고 함수 정의하는 법부터 자세히 알아보자.

 

함수는 헤더와 본체로 이루어져 있는데 먼저 헤더로는 반환 타입 함수명(매개변수)으로 이루어져 있다.

 

앞서 예시를 든 void가 그 자리에 있는데 반환하는 값이 없다는 의미다.

 

즉 return값이 없다는 뜻. 호출한 곳에 값을 돌려주지 않는다는 것이다.

 

뭐 간단하게 보자면

 

#include<stdio.h>
void function(); 	//프로토타입선언

main()
{
	function(); 	//함수호출
}

void function()
{
	printf("hello");
}

결과

hello

이런 것이다. 그러면 매개변수는 무엇인지 반환 타입이 있을 때는 어떻게 작용하는지 보자.

 

#include<stdio.h>;
int function(int, int); //프로토타입 자료형만 표시
main()
{
	int a = 10, b = 10;		//변수 a, b를 선언하고 각각 10으로 초기화한다.
    printf("%d ", function(a, b); 
  
  //function 함수에 a, b값을 보내 호출하고 리턴값을 printf()로 출력한다.
}
int function(int x, int y)	//int 형식의 변수 2개를 받아서 x, y 값에 넣어준다.
{
	int sum; 	// 함수 내 지역변수 main()에서는 사용할 수 없다.
    sum = x + y;	 //sum변수에 받은 x, y값을 더해서 저장해준다.
    
    return sum;	 //sum 변수값을 리턴시킨다.
}

결과

20

 

int function(int x, int y)에 맨 앞에 int가 반환 형식이다. 즉 함수 내에서 처리를 하고 리턴 시켜주는 값의 데이터형이 정수(integer) 값이다.

 

(int x, int y)를 매개변수라 하는데 함수를 호출할 때 int형식의 변수 두 개를 받아서 데이터 처리를 한다는 의미이다.

 

이때 함수에서는 매개변수로 받는 데이터 형식과 데이터 개수가 호출할 때 보내는 변수의 데이터 형식, 개수 일치해야 한다.

 

마찬가지로 반환 타입이 int니 return값도 int여야 한다.

 

이밖에도 리턴 시킬 때 곧바로 return (x+y) 이런 식으로 수식을 리턴 시킬 수도 있고 변수가 아니라 상수를 리턴 시켜도 되는 다양한 방법이 존재한다.

 

이 정도만 알면 함수의 기초 정도는 알 것이라 생각한다. 미흡한 설명이 많았으나 함수를 공부할 때쯤이면 프로그래밍 기초는 알 테니 이 정도 설명이면 충분한 거 같다.

반응형

댓글