함수에 대 한 제한
함수가 배열 또는 함수를 반환할 수 없습니다.그러나 이들은, 참조 나 포인터가 배열 또는 함수를 반환할 수 있습니다.배열을 반환 하는 다른 방법은 해당 배열 구성원으로 서만 가진 구조체를 선언 하는 것:
struct Address
{ char szAddress[31]; };
Address GetAddress();
인수는 함수에 선언 하는 형식 함수 선언의 반환 형식 영역에서 정의할 수 없습니다.다음 올바른 C 코드를 C++에서는 하지 않습니다.
enum Weather { Cloudy, Rainy, Sunny } GetWeather( Date Today )
때문에 앞의 코드를 허용 하지 않는 형식을 Weather 함수의 범위를 사용 하려면 로컬 GetWeather 반환 값을 제대로 사용할 수 없습니다.함수에 대 한 인수가 함수 범위를가지고 있기 때문에 인수 목록 내에서 변경 된 선언 같은 문제를가지고 그렇지 않으면 허용 합니다.
C + + 함수의 배열은 지원 하지 않습니다.그러나 함수 포인터 배열을 유용할 수 있습니다.파스칼식 대/소문자와 같은 언어 구문 분석 코드 토큰 구문 토큰에 연결 하는 파서를 구문 분석 하는 어휘 분석기를 자주 분리 됩니다.분석기는 각 토큰에 대 한 특정 서 수 값을 반환 하는 경우이 예제와 같이 적절 한 처리를 수행 하도록 코드를 작성할 수 있습니다.
// restrictions_to_functions.cpp
// The following functions are user-defined
int Error( char *szText) {return 1;}
int ProcessFORToken( char *szText ) {return 1;}
int ProcessWHILEToken( char *szText ){return 1;}
int ProcessBEGINToken( char *szText ){return 1;}
int ProcessENDToken( char *szText ){return 1;}
int ProcessIFToken( char *szText ){return 1;}
int ProcessTHENToken( char *szText ){return 1;}
int ProcessELSEToken( char *szText ){return 1;}
int (*ProcessToken[])( char * ) = {
ProcessFORToken, ProcessWHILEToken, ProcessBEGINToken,
ProcessENDToken, ProcessIFToken, ProcessTHENToken,
ProcessELSEToken
};
const int MaxTokenID = sizeof ProcessToken / sizeof( int (*)(char*) );
int DoProcessToken( int TokenID, char *szText ) {
if( TokenID < MaxTokenID )
return (*ProcessToken[TokenID])( szText );
else
return Error( szText );
}
int main()
{
}