Partager via


Restrictions sur les fonctions

Les fonctions ne peuvent pas retourner de tableaux ou de fonctions. Elles peuvent toutefois retourner des références ou des pointeurs vers des tableaux ou des fonctions. Une autre manière de retourner un tableau consiste à déclarer une structure avec uniquement ce tableau comme membre :

struct Address
{ char szAddress[31]; };

Address GetAddress();

La définition d'un type dans la partie type de retour d'une déclaration de fonction ou dans la déclaration d'un argument de fonction n'est pas autorisée. Le code C autorisé ci-dessous n'est pas conforme en C++ :

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

Le code précédent n'est pas autorisé, car le type Weather a une portée de fonction locale à GetWeather et la valeur de retour ne peut pas être utilisée correctement. Les arguments des fonctions ayant la fonction comme portée, les déclarations effectuées dans la liste d'arguments auraient le même problème si elles n'étaient pas autorisées.

C++ ne prend pas en charge les tableaux de fonctions. Toutefois, les tableaux de pointeurs vers des fonctions peuvent être utiles. Lors de l'analyse d'un langage de type Pascal, le code est souvent divisé en un analyseur lexical qui analyse les jetons et un analyseur qui attache la sémantique aux jetons. Si l'analyseur retourne une valeur ordinale particulière pour chaque jeton, vous pouvez écrire du code pour exécuter le traitement approprié comme illustré dans cet exemple :

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

Voir aussi

Référence

Déclarations de fonctions