Forhåndsmeddelelse

En fremadrettet erklæring er en type erklæring, hvor assembleren (kompilatoren) har mulighed for at løse referencer fra forskellige dele af programmet. Forward-deklarationen giver programmøren mulighed for at henvise til objekter, som compileren endnu ikke kender til, men som vil blive bestemt under kompileringsprocessen senere.

I programmering er en fremadrettet erklæring en erklæring om en identifikator (type, variabel eller funktion), som programmøren endnu ikke har defineret den fuldt ud. Identifikationsdeklarationen er påkrævet af compileren for at kende typen (størrelsen) af identifikatoren, men ikke dens værdi (i tilfælde af variabler).

void printThisInteger ( int );

I C/C++ betyder den givne streng den fremadrettede erklæring af en funktion og er dens prototype. Efter at have behandlet denne erklæring tillader compileren programmøren at henvise til printThisInteger-enheden i resten af ​​programmet. Funktionsdefinitionen skal erklæres et andet sted (i den samme eller en anden fil; linkerens opgave er at matche referencer til en given funktion i en eller flere objektfiler med dens enkeltdefinition i en anden):

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

Variabler kan eller kan ikke deklareres. Sådanne variable initialiseres under kompilering i henhold til sprogets regler (udefineret værdi, nul, NULL-markør, ...). Variabler, der er defineret i en anden kilde-/objektfil, skal forud-deklareres med det eksterne nøgleord:

int foo ; //foo kunne have været defineret et sted i denne fil ekstern int bar ; //bar skal være defineret i en anden fil

I Pascal og andre Wirth-programmeringssprog er det en generel regel, at alle enheder skal deklareres, før de bruges første gang. I C gælder den samme regel, der gør undtagelser for ikke-deklarerede funktioner og ufuldstændige typer. Så i C er der mulighed for at implementere et par gensidigt rekursive funktioner:

int først ( int x ) { hvis ( x == 0 ) retur 1 ; returnere sekund ( x -1 ); // se frem til anden } int sekund ( int x ) { hvis ( x == 0 ) returnere 0 ; returner først ( x -1 ); }

I Pascal kræver en lignende implementering en forudgående erklæring af den anden funktion før dens første brug. Uden en fremadrettet erklæring vil compileren udsende en fejlmeddelelse, der indikerer, at identifikatoren sekund blev brugt uden at blive erklæret.

Videresend reference (reference)

Udtrykket "forward reference" bruges nogle gange som et synonym for forward declaration [1] . Imidlertid refererer fremadrettet reference (reference) oftest til den faktiske brug af enheden før enhver erklæring; det vil sige, at referencen til anden i eksemplet ovenfor er en fremadrettet reference [2] [3] . I betragtning af, at den fremadrettede erklæring i Pascal er obligatorisk, er viderehenvisning (reference) forbudt i den.

Et eksempel på en fremadrettet reference i C++:

klasse C { offentligt : void mutator ( int x ) { myValue = x ; } int accessor () { return myValue ; } privat : int minVærdi ; };

I dette eksempel er der to anvendelser af myValue-attributten, før den erklæres. C++ tillader generelt lookahead. Det er tilladt i et særligt tilfælde: klassemedlemmer. En metode, der ændrer en attribut, kan ikke kompileres, før compileren ved, at myValue eksisterer. Derfor er det compilerens ansvar at huske metodedeklarationen, indtil den ser myValue-deklarationen.

Fremsende referencer (referencer) kan i høj grad øge kompleksiteten og hukommelseskravene til compileren. Dette bliver normalt en hindring for implementeringen af ​​compileren i én omgang.

Se også

Annoncering (datalogi)

Links

  1. MSDN: Konvertering til en Forward-Reference Class Type . Hentet 27. november 2011. Arkiveret fra originalen 28. marts 2008.
  2. Arkiveret kopi . Hentet 27. november 2011. Arkiveret fra originalen 3. marts 2016.
  3. Thinking in C++: Inlines & the compiler Arkiveret 9. juli 2011.