Előzetes bejelentés

A forward deklaráció egy olyan deklaráció, amelyben az assembler (fordító) képes feloldani a program különböző részeiről származó hivatkozásokat. A továbbító deklaráció lehetővé teszi a programozó számára, hogy olyan objektumokra hivatkozzon, amelyekről a fordító még nem tud, de amelyeket később a fordítási folyamat során határoznak meg.

A programozásban a forward deklaráció egy olyan azonosító (típus, változó vagy függvény) deklarációja, amelyre a programozó még nem definiálta teljesen. Az azonosító deklarációra azért van szükség a fordítónak, hogy ismerje az azonosító típusát (méretét), de nem (változók esetén) az értékét.

void printThisInteger ( int );

A C/C++ nyelvben az adott karakterlánc egy függvény előremenő deklarációját jelenti, és a prototípusa. A deklaráció feldolgozása után a fordító lehetővé teszi a programozó számára, hogy a program többi részében hivatkozzon a printThisInteger entitásra. A függvénydefiníciót valahol máshol kell deklarálni (ugyanabban vagy másik fájlban; a linker feladata , hogy egy vagy több objektumfájlban egy adott függvényre mutató hivatkozásokat párosítson a másikban található egyetlen definíciójával):

void printThisInteger ( int x ) { printf ( "%d \n " , x ); }

A változók deklarálhatók vagy nem. Az ilyen változókat a fordítás során inicializáljuk a nyelv szabályai szerint (undefined value, nulla, NULL pointer, ...). A másik forrás-/objektumfájlban definiált változókat előre deklarálni kell az extern kulcsszóval:

int foo ; //foo definiálható valahol ebben a fájlban extern int bar ; A //bar-ot egy másik fájlban kell meghatározni

A Pascal és más Wirth programozási nyelvekben általános szabály, hogy minden entitást deklarálni kell az első használat előtt. C-ben ugyanez a szabály érvényes, kivételt képezve a nem deklarált függvényekre és a hiányos típusokra. Tehát C-ben lehetőség van egy pár kölcsönösen rekurzív függvény megvalósítására:

int első ( int x ) { ha ( x == 0 ) visszatérés 1 ; vissza második ( x -1 ); // nézz előre a másodikra ​​} int másodperc ( int x ) { ha ( x == 0 ) return 0 ; először térjen vissza ( x -1 ); }

Pascalban egy hasonló megvalósítás megköveteli a második függvény előzetes deklarálását az első használat előtt. Továbbítási deklaráció nélkül a fordító hibaüzenetet ad ki, jelezve, hogy a második azonosítót deklarálás nélkül használták fel.

Továbbítási hivatkozás (hivatkozás)

A "további hivatkozás" kifejezést néha a továbbítási nyilatkozat szinonimájaként használják [1] . Leggyakrabban azonban az előremutató hivatkozás (hivatkozás) az entitás tényleges használatára utal bármely nyilatkozat előtt; vagyis a fenti példában a másodikra ​​való hivatkozás egy előremutató hivatkozás [2] [3] . Tekintettel tehát arra, hogy a Pascal-ban kötelező a továbbítási nyilatkozat, tilos benne az előre utalás (hivatkozás).

Példa egy előremutató hivatkozásra C++ nyelven:

osztály C { nyilvános : void mutátor ( int x ) { myValue = x ; } int accessor () { return myValue ; } privát : int myValue ; };

Ebben a példában a myValue attribútumnak két használata van a deklarálás előtt. A C++ általában nem engedélyezi az előretekintést. Speciális esetben megengedett: osztálytagok. Egy attribútumot módosító metódust nem lehet lefordítani addig, amíg a fordító nem tudja, hogy a myValue létezik. Ezért a fordító felelőssége, hogy emlékezzen a metódus deklarációjára, amíg meg nem látja a myValue deklarációt.

Az előremenő hivatkozások (hivatkozások) kiszolgálása nagymértékben növelheti a fordító bonyolultságát és memóriaigényét. Ez általában egy menetben akadályozza a fordítóprogram megvalósítását.

Lásd még

Bejelentés (számítástechnika)

Linkek

  1. MSDN: Konvertálás továbbítási referencia osztálytípussá . Letöltve: 2011. november 27. Az eredetiből archiválva : 2008. március 28..
  2. Archivált másolat . Letöltve: 2011. november 27. Az eredetiből archiválva : 2016. március 3.
  3. Thinking in C++: Inlines & the compiler Archivált : 2011. július 9.