Sdílet prostřednictvím


Omezení funkcí

Funkce nemohou vracet pole nebo funkce.Mohou však vrátit odkazy na pole nebo funkce.Další způsob, jak vrátit pole je deklarovat strukturu s pouze tímto polem jako člen:

struct Address
{ char szAddress[31]; };

Address GetAddress();

Definování typu v části návratového typu deklarace funkce nebo v deklaraci jakéhokoli argumentu funkce je neplatné.Následující platný kód jazyka C není platný v jazyce C++:

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

Předchozí kód je zakázán, protože typ Weather má oproti GetWeather místní obor funkce a návratovou hodnotu nelze správně použít.Vzhledem k tomu, že argumenty funkce mají obor funkce, trpí deklarace vytvořené v rámci seznamu argumentů, stejným problémem, nejsou-li povoleny.

Jazyk C++ nepodporuje pole funkcí.Lze však použít pole ukazatelů na funkce.Při analýze jazyků podobných jazyku Pascal je kód často rozdělen na lexikální analyzátor, který analyzuje tokeny a na analyzátor, který k tokenům připojuje sémantiku.Vrátí-li analyzátor určité pořadové číslo pro každý token, může být kód zapsán pro provedení příslušného zpracování, jak je uvedeno v následujícím příkladu:

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

Viz také

Referenční dokumentace

Deklarace funkcí