Compartilhar via


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()
{
}

Consulte também

Referência

Declarações de função