Restrições de funções
Funções não podem retornar conjuntos ou funções.No entanto, eles podem, retornar referências ou ponteiros para funções ou matrizes.Outra maneira para retornar uma matriz é declarar uma estrutura com apenas essa matriz como membro:
struct Address
{ char szAddress[31]; };
Address GetAddress();
É ilegal para definir um tipo na parte de tipo de retorno de uma declaração de função ou na declaração de qualquer argumento para uma função.O seguinte código c legal é ilegal em C++:
enum Weather { Cloudy, Rainy, Sunny } GetWeather( Date Today )
O código anterior não é permitido porque o tipo de Weather tem escopo de função local para GetWeather e o valor de retorno não pode ser usado de forma adequada.Como argumentos para funções têm escopo de função, declarações feitas dentro da lista de argumentos tem o mesmo problema se não permitido.
C++ não dá suporte para matrizes de funções.No entanto, matrizes de ponteiros para funções podem ser útil.Analisar uma linguagem Pascal semelhante, o código geralmente é separado em um analisador léxico que analisa os tokens e um analisador que anexa tokens de semântica.Se o analisador de retornar um valor ordinal específico para cada símbolo, o código pode ser escrito para realizar processamento apropriado, como mostrado neste exemplo:
// 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()
{
}