函式的限制
函式不能傳回陣列或函式。 使用者可以,不過,回到參考或指標陣列或函式。 傳回陣列的另一種方法是宣告具有該陣列為成員的結構:
struct Address
{ char szAddress[31]; };
Address GetAddress();
不能在函式宣告的其中一個傳回型別部份,或任何引數的函式的宣告中定義的型別。 下列的法律 c 程式碼是在 C++ 中不合法的:
enum Weather { Cloudy, Rainy, Sunny } GetWeather( Date Today )
上述程式碼不允許,因為型別Weather函式範圍的本機GetWeather ,而且傳回的值不正確使用。 因為函式的引數的函式範圍,在引數清單中所做的宣告會有同樣的問題如果不允許。
C + + 不支援函式陣列。 然而,陣列的函式的指標會很有用。 在剖析類似 pascal 命名法的語言,程式碼通常分為權杖和附加的語彙基元的語意的剖析器會剖析語彙分析。 如果 [分析器] 傳回特定的序數值,為每個語彙基元,就可以撰寫程式碼來執行適當的處理,如本例所示:
// 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()
{
}