개요
함수는 코드를 묶어놓은 것입니다. 자주 사용되기 때문에 묶어놓을 수도 있고, 알아보기 편하게 묶어놓을 수도 있습니다.
일반적으로는 입력과 출력이 있으나, 입력이 없을수도 있고 출력이 없을수도 있고 둘 다 없을수도 있습니다.
함수 선언
함수는 다음과 같이 선언할 수 있습니다.
함수이름(입력) { return 출력; }
- 함수 이름은 변수명과 같은 규칙을 따릅니다.
- 입력은 '매개 변수'를 의미합니다. 없을 수도 있고, 여러 개일 수도 있습니다.
- 출력은 '반환값'을 의미합니다. 없을 수도 있고, 1개일 수 있습니다.
예제 1 (입력, 출력이 없음)
입력과 출력이 없으며, 호출하면 단순히 메시지를 출력하는 함수를 작성해 보겠습니다
#include <a_samp> main() { my_function(); } my_function() { printf("hi, function!"); }
여기서 my_function이 함수 이름입니다. 입력값이 없더라도 ( ) 괄호는 꼭 필요합니다. 현재 my_function()을 메인 함수에서 호출하고 있습니다. 콘솔창에 "hi, function!' 이 출력될 것입니다.
예제 2 (입력만 있음)
이번에는 함수에 입력을 만들어 보도록 하겠습니다. sum 이라는 함수를 만들 것이고, 두 개의 숫자를 받을 것입니다.
#include <a_samp> main() { sum(100,55); // 호출부 } sum(a,b) // 선언부 { printf("sum is %d.", a+b ); }
매개 변수(입력)로 두 개의 변수가 생겼습니다. 본 예제에서는 각각을 a와 b라고 이름을 지었는데, 여러분의 마음대로 변수명을 변경해도 됩니다. 호출부와 선언부의 개수만 맞춘다면 이름은 어떻게 되던 상관이 없습니다.
sum() 함수는 a와 b를 받아 두 개를 더한 값을 콘솔창에 표시할 것입니다. 여전히 함수의 출력값은 없습니다.
예제 3 (입력, 출력)
이번에는 출력까지 해 보도록 하겠습니다. 여기서 출력은 콘솔창에 출력하는 걸 뜻하는 게 아니라, 함수가 반환하는 값을 의미합니다.
#include <a_samp> main() { new s = sum(100,55); // 호출부 printf("sum is %d.",s); } sum(a,b) // 선언부 { return a+b; }
sum() 함수부터 살펴봅니다. return문은 함수를 종료함과 동시에 값을 호출부로 반환하는 역할을 합니다. 호출부로 반환한다는 것은 return에 적힌 값이 호출부로 간다는 것입니다. 예를 들어 위 코드의 경우 return a+b; 는 return 155;를 의미하며, 따라서 호출부의 코드는 반환값 155를 받아 new a = 155; 가 됩니다.
예제 4 (실수 입출력)
지금까지는 오고 가는 변수가 전부 정수(int)였습니다. 이제 실수(float)를 주고 받아보려 합니다. 앞에서 배웠듯 실수를 담기 위해서는 변수에 Float: 태그를 붙여야 합니다.
#include <a_samp> Float:sum(Float:a, Float:b) // 선언부 { return a+b; } main() { new Float:s = sum(100.5,12.78); // 호출부 printf("sum is %f.",s); }
우선 특징은 선언부를 호출부보다 위쪽으로 올렸다는 것입니다. 원래 소스코드 상에서 함수 선언이 호출하는 부분보다 위쪽에 있어야 하므로 sum() 함수와 main() 함수의 순서를 바꿔 보았습니다.
Float: 태그가 어디에 붙었는지와 그 이유를 잘 살펴보시기 바랍니다.
- Float:sum()
- 함수의 반환값(return)이 실수(float)이기 때문입니다.
- Float:a, Float:b
- 함수의 매개 변수(입력)가 실수(float)이기 때문입니다.
- new Float:s
- 함수의 반환값(return)이 실수(float)이기 때문입니다.