Ograniczenia dotyczące funkcji

Funkcje nie mogą zwracać tablic lub funkcji.Jednakże, mogą zwracać odwołania lub wskaźniki do tablic lub funkcji.Innym sposobem zwracania tablicy jest deklaracja struktury tylko z tą tablica jako element członkowski:

struct Address
{ char szAddress[31]; };

Address GetAddress();

Niedozwolone jest definiowanie typu w części zwracanego typu deklaracji funkcji lub w deklaracji argumentów do funkcji.Poniższy poprawny kod C jest niedozwolony w języku C++:

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

Poprzedni kod jest niedozwolony, ponieważ typ Weather ma lokalny zakres funkcji do GetWeather i wartość zwracana nie może być użyta poprawnie.Ponieważ argumenty funkcji mają zakres funkcji, deklaracje złożone zgodnie z listą argumentów mają ten sam problem, jeśli nie są dozwolone.

C++ nie obsługuje tablic funkcji.Jednakże, tablice wskaźników do funkcji mogą być przydatne.Podczas analizowania języka takiego jak Pascal, kod jest często rozdzielany między analizator leksykalny, który parsuje tokeny i parser, który dołącza semantykę do tokenów.Jeśli analizator zwróci szczególną wartość porządkową dla każdego tokenu, kod może być napisany w celu wykonywania właściwego przetwarzania, jak pokazano w poniższym przykładzie:

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

Zobacz też

Informacje

Deklaracje funkcji