함수 선언 구문
함수는 전역 함수이거나 클래스나 구조체의 멤버가 될 수 있습니다. 이러한 함수는 다음 시퀀스를 사용하여 선언됩니다.
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] declarator [cv-qualifer]
[exception-spec]
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] [*|&] [ms-modifer] identifier
( argument-list ) [cv-qualifer] [exception-spec]
선언 지정자. 지정자를 참조하십시오.
클래스 내의 선택적 friend 지정자.
선택적 저장소 클래스 지정자. 전역 함수의 경우 허용되는 저장소 클래스 지정자는 static 및 extern입니다. 클래스 멤버 함수의 경우 extern을 사용할 수 없습니다.
선택적 함수 지정자. 전역 함수의 경우 허용되는 유일한 함수 지정자는 inline입니다. 클래스 멤버 함수의 경우 virtual 및 inline을 사용할 수 있고 , 생성자의 경우explicit를 사용할 수 있습니다.
반환 형식을 나타내는 형식 지정자(* 또는 &를 사용하여 포인터 또는 참조 형식을 수정).
선언자.
반환 형식을 수정하는 선택적 포인터 또는 참조 연산자.
호출 규칙을 지정하는 선택적 Microsoft 전용 한정자. Microsoft 전용 한정자를 참조하십시오.
함수의 이름. 함수가 클래스 또는 구조체의 멤버인 경우 범위 결정 연산자를 사용하여 이름을 정규화할 수 있습니다.
**()**로 묶인 인수 선언 목록.
선택적 const 또는 volatile 한정자. 이 컨텍스트에서 const는 클래스 멤버에 대해서만 사용할 수 있으며 함수가 클래스의 데이터 멤버를 수정하지 않음을 나타내는 데 사용합니다.
반환 형식이 함수 포인터인 경우 선언자 구문은 아래 설명과 같이 더 복잡해질 수 있습니다.
- 함수에서 throw하는 예외를 나타내는 선택적 예외 지정. 예외 지정을 참조하십시오.
그렇게 선언된 식별자의 형식은 지정된 인수 목록을 사용하며 선언 지정자가 가리키는 형식을 반환하는 const 또는 volatile 함수로 구성될 수 있습니다.
다음 예제에서는 간단한 함수 선언 두 가지를 보여 줍니다.
char *strchr( char *dest, char *src );
static int atoi( const char *ascnum ) const;
함수 포인터를 반환하는 함수 선언
함수 포인터 형식을 반환하는 함수를 선언할 경우 typedef를 사용하여 함수 포인터 형식에 대한 별칭을 선언하는 것이 좋습니다. 예
typedef int (*fp)(int);
fp myFunction(char* s); // function returning function pointer
다른 방법으로, 식별자(위 예제에서 fp)를 함수 이름 및 인수 목록으로 대체하여 함수 선언의 올바른 구문을 함수 포인터의 선언자 구문에서 추론할 수 있습니다. 예제는 다음과 같습니다.
int (*myFunction(char* s))(int);
앞의 선언은 위에서 typedef를 사용한 선언과 같습니다.