对函数的限制
函数不能返回数组或函数。 ,但是,它们可以返回引用或指向数组或功能。 另一种返回数组将声明仅该数组的结构作为成员:
struct Address
{ char szAddress[31]; };
Address GetAddress();
定义一个类型在声明函数的返回类型的部分或任何参数的声明添加到函数是非法的。 下面的合法的 C 代码是非法的 C++ 中:
enum Weather { Cloudy, Rainy, Sunny } GetWeather( Date Today )
上面的代码禁止,因为类型 Weather 的功能范围限于向 GetWeather ,不能正确使用返回值。 由于函数的参数的功能范围,其中进行的声明参数列表将具有相同的问题,如果不允许的。
C++ 不支持功能。 但是,一些指向函数的指针会很有用。 在分析一种帕其卡语言样式的语言,代码通常分为分析标记和分析器附加语义对于标记的一个词法分析器。 如果该分析器返回每个标记的特定序号值,如以下示例所示,代码中编写执行适当地处理:
// 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()
{
}