상위 질문
타임라인
채팅
관점
함수 원형
위키백과, 무료 백과사전
Remove ads
함수 원형 또는 함수 프로토타입, 펑션 프로토타입(function prototype)은 컴퓨터 프로그래밍에서 함수 이름을 지정하는 선언과 형식 시그니처(항수 (수학), 매개변수의 자료형 및 반환형)를 지정하지만, 함수 본문은 생략한다. 함수 정의는 함수가 어떻게 동작하는지("구현")를 지정하는 반면, 함수 원형은 단순히 해당 인터페이스, 즉 어떤 데이터 형식이 들어가고 나오는지 지정한다. "함수 원형"이라는 용어는 특히 C 및 C++ 프로그래밍 언어에서 사용되는데, 전방 선언을 헤더 파일에 배치하여 프로그램을 번역 단위로 분할할 수 있게 한다. 즉, 컴파일러가 개별적으로 오브젝트 파일로 번역하고, 링커에 의해 실행 파일 또는 라이브러리로 결합될 수 있는 부분으로 분할한다. 함수 선언은 함수 정의보다 먼저 나오며, 이름, 반환형, 저장 클래스 및 기타 관련 속성에 대한 세부 정보를 제공한다.[1]
함수 원형은 다음 중 하나의 경우에 사용될 수 있다.[2]
- 외부 유형 정의
- 인터페이스 부분 생성
원형에서 매개변수 이름은 선택 사항이며(C/C++에서는 함수 원형 영역을 가지며, 해당 영역은 원형 끝에서 끝난다), 그러나 형식은 모든 한정자와 함께 필요하다(예: 포인터 또는 const 매개변수에 대한 참조인 경우). 단독 const는 제외한다.
객체 지향 프로그래밍에서 인터페이스와 추상 메서드는 거의 동일한 목적을 수행한다.
Remove ads
예시
다음 함수 원형을 고려한다.
void sum(int a, int b);
또는, 이름 지정된 매개변수 없이:
void sum(int, int);
또는, 후행 반환형과 함께 (C++ 전용):
auto sum(int, int) -> void;
함수 원형에는 함수 시그니처, 함수 이름, 반환형 및 접근 지정자가 포함된다. 이 경우 함수 이름은 "sum"이다. 함수 시그니처는 매개변수의 수와 해당 유형을 정의한다. 반환형은 "void"이다. 이는 함수가 어떤 값도 반환하지 않을 것임을 의미한다. 첫 번째 예시의 매개변수 이름은 선택 사항이다.
사용법
C 초기 버전에서는 함수가 이전에 선언되지 않았고 이름이 왼쪽 괄호 뒤에 표현식에 나타나면, int를 반환하는 함수로 암시적으로 선언되었으며 인수에 대해서는 아무것도 가정되지 않았다. 이 경우 컴파일러는 인수의 수와 유형에 대한 컴파일 시간 유효성 검사를 수행할 수 없었다.
C99 표준은 원형 사용을 요구한다.
#include <limits.h>
#include <stdio.h>
// Function prototype
char myFunction(int a);
int main(void) {
putchar(myFunction(-1)); // Correctly formatted call
putchar(myFunction(1.5)); // Compiler warning: type mismatch
putchar(myFunction("IncorrectArgType")); // Compiler warning: type mismatch
putchar(myFunction()); // Compiler error: too few arguments
// Although adding 1 to INT_MAX is an integer overflow error,
// it cannot be detected at compile time
putchar(myFunction(INT_MAX + 1));
return 0;
}
// Function definition
char myFunction(int n) {
if (n > 0) {
return '>';
} else if (n < 0) {
return '<';
} else {
return '=';
}
}
함수 MyFunction은 정수 인수로 호출될 것으로 예상한다. 함수 원형을 포함함으로써, 함수가 하나의 정수 인수를 취함을 컴파일러에 알리고 컴파일러가 잘못 지정된 호출을 잡을 수 있도록 한다.
라이브러리 인터페이스 생성
헤더 파일에 함수 원형을 배치함으로써 라이브러리에 대한 인터페이스를 지정할 수 있다.
클래스 선언
C++에서는 함수 원형이 클래스 정의에서도 사용된다.
Remove ads
같이 보기
- 모듈성 (프로그래밍)
- 프로토콜 (객체 지향 프로그래밍)
- 추상 메서드
각주
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads