Condividi tramite


Restrizioni sulle funzioni

le funzioni non possono restituire le matrici o le funzioni.Possono, tuttavia, restituendo i riferimenti o puntatori a matrici o funzioni.Un altro modo per restituire una matrice consiste nel dichiarare una struttura con solo la matrice come membro:

struct Address
{ char szAddress[31]; };

Address GetAddress();

Non è consentito definire un tipo nella parte del tipo restituito di dichiarazione di funzione o nella dichiarazione di qualsiasi argomento a una funzione.Il seguente codice valido c# non valido in C++:

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

Il codice precedente è possibile perché il tipo Weather ha locale dell'ambito della funzione a GetWeather e il valore restituito non è in grado di utilizzarli.Poiché gli argomenti alle funzioni hanno ambito della funzione, le dichiarazioni apportate nell'elenco di argomenti eseguono lo stesso consentire problema se non.

C++ non supporta le matrici di funzioni.Tuttavia, le matrici di puntatori a funzioni possono essere utili.Quando si analizzano il linguaggio simile alla convenzione pascal, il codice viene separato spesso in un analizzatore lessicale che analizza i token e un parser che collega la semantica dei token.Se il calcolo restituisce un valore ordinale particolare per ogni token, il codice può essere scritto per eseguire l'elaborazione corretta come illustrato nel seguente esempio:

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

Vedere anche

Riferimenti

Dichiarazioni di funzione