티스토리 뷰


 

안녕하세요. 노루입니다.

며칠을 고민고민하다 첫 포스팅으로 c언어 함수에 대해 올리게 되는군요. 이런저런 계획을 세워 좋은 포스팅 할 수 있게 하겠습니다.

 

 Prototype 이라 함은, 여러가지 의미로 사용할 수 있겠지만 저는 그냥 '함수 원형' 이라는 표현을 씁니다. c언어 기본 라이브러리 헤더에서 제공하는 함수들을 우리는 수없이 많이 사용하고 있습니다. 우리는 이 각각의 함수들이 어떤식의 코드로 짜여져 있는지 알지 못합니다. 굳이 알 필요조차 없습니다. 하지만 아무리 라이브러리에서 수없이 많은 질좋고 편리한 함수를 제공한다고 하더라도 그 사용법을 모르면 사용할 수 없습니다. 

 그래서 우리는 사용법을 알기 위해 함수의 정의를 표현한 prototype을 찾아봅니다. 이 함수의 원형을 제대로 알고 있다면 더 편리하게 소스코드를 구현할 수 있을 것이고, 제대로 알지 못하면 두 줄로 완성될 코드를 여러줄 늘려가며 복잡하게 구현이 될 수도 있습니다. 물론 사용자가 직접 작성한 함수도 prototype이 될 수 있습니다.

 이렇게 말로만 설명하면 이해가 잘 안 가실수 있으니 예제를 들어가며 설명하겠습니다.

 

 우리가 흔히 사용하는 스트링 함수중에 strlen 이라는 함수가 있습니다. 문자열의 길이를 추출해내는 함수인데요, 이 함수의 원형, 즉 Prototype은 어떻게 될까요?

 

size_t strlen (const char *str);

 

 strlen의 원형은 위와 같습니다. 좀 생소한게 있으실 수도 있겠지만, 차차 설명하기로 하구요. 우선은 간단하게 size_t 란 것은 c 라이브러리에서 길이를 반환할 때 일반적으로 사용하는 타입으로 생각해주시면 될거같습니다. 지금은 그냥 편하게 int형과 비슷하다. 라는 정도로 생각해 주시길 바랍니다. 괄호 안에 const char * 라는 타입은, '수정할 수 없는 문자열' 정도로 생각해 주시길 바랍니다.

 이 size_t는 함수의 리턴타입입니다. 즉, 이 함수를 사용하면 리턴값이 발생하는데 이 리턴값의 타입이 정수형이다. 라는 걸 나타내고 있는 것입니다. 다음으로 strlen이란 것은 함수의 이름입니다. 그리고 괄호 안은 파라미터 형식을 나타내주고 있습니다. 즉, strlen이란 함수를 이용할 때, 괄호 안에 const char * / char * 의 타입으로 이루어져 있는 파라미터를 넣어라. 라는 말입니다. 그래서 우리는 흔히 이런 함수를 사용할 때, 다음과 같이 쓰곤 합니다.

 


#include <stdio.h>
#include <string.h>

int main()
{
    int length;
    char *str = "Hello";

    length = strlen (str);

    printf("%s\n", str);
    printf("Length : %d=n", length); 

    return 0;
}


<실행 결과>

 

 strlen함수는 스트링을 파라미터로 받는 함수이기 때문에, 스트링으로 선언한 str변수 "Hello" 를 파라미터로 넘겨주었습니다. 또한, 정수형을 리턴하는 함수라서, 정수형인 length 변수에 리턴 값을 받는 것입니다. 조금 어려운 말로 표현하면 '함수 strlen은 파라미터의 글자수를 반환한다.' 라고도 표현할 수 있습니다.

 

<함수의 구조>

리턴타입    함수이름    ( 파라미터 )

 

 간단히 본 함수의 구조는 위와 같습니다.

 리턴타입이 void로 선언된 함수를 제외한 모든 함수는 리턴 값을 가집니다. 심지어 우리가 아무렇지도 않게 쓰는  printf 함수조차 리턴 값이 있습니다. (printf의 리턴값은 int형으로, 입력된 글자수를 리턴합니다.) 만약에 printf 로 쓰는 글자수를 계산해야 할 필요가 있을때, 이 printf의 리턴값이 존재한다는걸 모르는 사람은 일일히 string 변수에 담아서 strlen 함수를 통해서 계산하려 할 것입니다. 하지만 printf의 리턴값이 글자수라는걸 아는 사람은 그럴 필요없이 "length += printf("....");" 이와 같이 계산할 것입니다. 훨씬 코드가 간결해지고 작성하기 편해집니다.

 이토록 함수의 원형을 잘 아는 사람은 코드를 더욱 쉽게 짤 수 밖에 없습니다. 이 프로토타입 연구소 카테고리에는 이와 같은 함수의 원형들을 포스팅 하려합니다. 사실 함수 원형은 영어로 된 위키피디아에 검색만하면 대부분 다 나옵니다. 그것도 아주 잘 나옵니다. 저 역시 주로 위키피디아를 참조하며, 저는 보다 자주 쓰이고 유용한 함수의 원형들에 대해 포스팅 하려는 계획입니다. 함수 원형들을 한글로 알아보기 쉽게 정리해 놓으면 저 역시 편할것 같다 라는 생각을 종종 해와서 계획한 것입니다.

 

 

 * 다음 포스팅은 함수의 리턴타입과, 파라미터에 대해 좀 더 자세히 알아보도록 하겠습니다.

 

 

 

 제가 영어와 한글을 혼용해서 쓰기때문에 용어정리를 매번 아래쪽에 하도록 하겠습니다. 왼쪽, 오른쪽은 같은 의미입니다. 


* 용어정리

  • 리턴 = 반환
  • 리턴값 = 반환값
  • 리턴타입 = 반환형
  • 파라미터 = 매개변수
  • 스트링 = 문자열
  • 프로토타입(prototype) = 원형

     * 참조

     

     

    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    'C, C++ > C, C++' 카테고리의 다른 글

    c/c++ sprintf, snprintf 함수  (3) 2014.01.21
    C언어 qsort() 함수  (3) 2014.01.02
    배열의 개수를 세는 _countof 매크로  (0) 2013.12.31
    c언어 - 함수포인터 (Function pointer)  (14) 2013.12.30
    c언어 함수에 대한 기본 (2)  (0) 2013.06.14
    c언어 함수에 대한 기본 (1)  (0) 2013.06.11

    댓글
    댓글쓰기 폼