Compartir a través de


Restricciones en funciones

Las funciones no pueden devolver las matrices o funciones.Pueden, sin embargo, devolver referencias o punteros a matrices o a las funciones.Otra manera de devolver una matriz es declarar una estructura con sólo esa matriz como miembro:

struct Address
{ char szAddress[31]; };

Address GetAddress();

No es válido definir un tipo en la parte del tipo de valor devuelto de una declaración de función o en la declaración de cualquier argumento de una función.El código siguiente legal de C no es válido en C++:

enum Weather { Cloudy, Rainy, Sunny } GetWeather( Date Today )

Se deniega el código anterior porque el tipo Weather tiene locales del ámbito de la función a GetWeather y el valor devuelto no puede utilizar correctamente.Dado que los argumentos a funciones tienen ámbito de función, las declaraciones realizadas dentro de la lista de argumentos tendrían el mismo problema si no permitido.

C++ no admite matrices de funciones.Sin embargo, las matrices de punteros a funciones pueden ser útiles.En a analizar Pascal-como lenguaje, el código se separa en un analizador léxico que analizar tokens y un analizador que asocia la semántica los tokens.Si el analizador devuelve un valor ordinal determinado por cada símbolo, el código se puede escribir para realizar el procesamiento adecuado tal y como se muestra en este ejemplo:

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

Vea también

Referencia

Declaraciones de función