Aracılığıyla paylaş


İşlev kısıtlamaları

İşlevler, diziler veya işlevleri geri döndüremiyor.Ancak, başvurular veya işaretçiler diziler veya işlevleri döndürmeleri olabilir.Üye olarak bu diziyi yapısıyla bildirmek için bir dizi dönmek için başka bir yolu şöyledir:

struct Address
{ char szAddress[31]; };

Address GetAddress();

Bir işlev bildirimini return type kısmında veya herhangi bir bağımsız değişkeni bir işlev bildiriminde bir tür tanýmlamak için geçersiz.C++'da aşağıdaki yasal c kodu geçersiz:

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

Yukarıdaki kod olduğundan devre dışı bırakılmış türü Weather işlevi için yerel kapsamına sahip GetWeather ve dönüş değeri doğru olarak kullanılamaz.İşlevler için bağımsız değişkenler işlev kapsamı olmadığından, bağımsız değişken listesi içinde yapılan bildirimler aynı sorun yoktur değilse izin verilir.

C++ dizileri işlevleri desteklemez.Ancak, işaretçiler işlevlerine dizileri yararlı olabilir.Pascal benzeri dil ayrıştırma kod, simgeleri ve belirteçleri semantiği bağlayan bir Ayrıştırıcı ayrıştırır sözlü bir çözümleyici içine genellikle ayrılır.Analyzer her token için belirli bir sıra değer döndürürse, bu örnekte gösterildiği gibi uygun işleme gerçekleştirmek için kodu yazılabilir.

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

Ayrıca bkz.

Başvuru

Ayarlanmadı