Ograniczenia dotyczące funkcji
Nie zwracają tablice lub funkcji.Można jednak zwracały odniesienia lub wskaźniki tablic lub funkcji.Innym sposobem zwracają tablicę jest zadeklarować struktury z tylko w tej tablicy jako członek:
struct Address
{ char szAddress[31]; };
Address GetAddress();
Nie jest dozwolone, aby zdefiniować typ w części return typ deklaracji funkcji lub w deklaracji którykolwiek z argumentów funkcji.Poniższy kod c prawna jest niedozwolony w języku C++:
enum Weather { Cloudy, Rainy, Sunny } GetWeather( Date Today )
Powyższy kod jest niedozwolone, ponieważ typ Weather ma zakres funkcji lokalne do GetWeather i zwracana wartość nie może być właściwie użyte.Ponieważ argumenty funkcji mają zakres funkcji, deklaracji złożonych zgodnie z listy argumentów miałyby ten sam problem Jeśli nie dopuszcza.
C++ nie obsługuje tablic funkcji.Jednakże tablice wskaźników do funkcji może być przydatne.Podczas analizowania języka Pascal podobne, kod jest często podzielony leksykalne analyzer, analizująca tokenów i analizatora składni, łączący semantykę tokenów.Jeśli analizator zwraca wartość porządkową określonego dla każdego tokenu, można napisać kod do wykonywania odpowiednich przetwarzania, jak 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()
{
}