The Pawn language - CompuPhase

함수

개요

함수는 코드를 묶어놓은 것입니다. 자주 사용되기 때문에 묶어놓을 수도 있고, 알아보기 편하게 묶어놓을 수도 있습니다.

일반적으로는 입력과 출력이 있으나, 입력이 없을수도 있고 출력이 없을수도 있고 둘 다 없을수도 있습니다.

함수 선언

함수는 다음과 같이 선언할 수 있습니다.

함수이름(입력)
{
    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)이기 때문입니다.

댓글

댓글 본문
  1. 준영
    1번 읽음.

    이해 완료!
graphittie 자세히 보기