Välitysilmoitus on ilmoitustyyppi, jossa kokoajalla (kääntäjällä) on kyky ratkaista viittauksia ohjelman eri osista. Eteenpäin-ilmoitus antaa ohjelmoijalle mahdollisuuden viitata objekteihin, joista kääntäjä ei vielä tiedä, mutta jotka määritetään käännösprosessin aikana myöhemmin.
Ohjelmoinnissa välitysilmoitus on sellaisen tunnisteen (tyyppi, muuttuja tai toiminto) ilmoitus, jolle ohjelmoija ei ole vielä täysin määrittänyt sitä. Kääntäjä vaatii tunnisteen ilmoituksen, jotta hän tietää tunnisteen tyypin (koon), mutta ei sen arvoa (muuttujien tapauksessa).
void printThisInteger ( int );C/C++:ssa annettu merkkijono tarkoittaa funktion eteenpäinlähetystä ja on sen prototyyppi. Tämän ilmoituksen käsittelyn jälkeen kääntäjä sallii ohjelmoijan viitata printThisInteger-olioon ohjelman muussa osassa. Funktiomäärittely on ilmoitettava jossain muualla (samassa tai toisessa tiedostossa; linkittäjän tehtävänä on sovittaa viittaukset tiettyyn funktioon yhdessä tai useammassa objektitiedostossa sen yksittäiseen määritelmään toisessa):
void printThisInteger ( int x ) { printf ( "%d \n " , x ); }Muuttujat voidaan ilmoittaa tai olla ilmoittamatta. Tällaiset muuttujat alustetaan kääntämisen aikana kielen sääntöjen mukaan (määrittämätön arvo, nolla, NULL-osoitin, ...). Toisessa lähde-/objektitiedostossa määritetyt muuttujat on esiteltävä extern-avainsanalla:
int foo ; //foo olisi voitu määrittää jossain tässä tiedostossa extern int bar ; //bar on määritettävä toisessa tiedostossaPascalissa ja muissa Wirthin ohjelmointikielissä se tosiasia, että kaikki entiteetit on ilmoitettava ennen niiden ensimmäistä käyttöä, on yleinen sääntö . C:ssä pätee sama sääntö, joka tekee poikkeuksia ilmoittamattomille funktioille ja epätäydellisille tyypeille. Joten C:ssä on mahdollisuus toteuttaa pari keskenään rekursiivisia funktioita:
int ensimmäinen ( int x ) { jos ( x == 0 ) paluu 1 ; palauta toinen ( x -1 ); // katso eteenpäin toiseen } int sekunti ( int x ) { jos ( x == 0 ) paluu 0 ; palauta ensin ( x -1 ); }Pascalissa samanlainen toteutus edellyttää toisen funktion ennakkoilmoitusta ennen sen ensimmäistä käyttöä. Ilman välitysilmoitusta kääntäjä antaa virhesanoman, joka osoittaa, että tunnisteen sekuntia käytettiin ilmoittamatta.
Termiä "välitysviittaus" käytetään joskus synonyyminä ennakkoilmoitukselle [1] . Useimmiten väliviittaus (viittaus) viittaa kuitenkin entiteetin todelliseen käyttöön ennen ilmoitusta; eli viittaus toiseen yllä olevassa esimerkissä on eteenpäin suuntautuva viite [2] [3] . Näin ollen, kun otetaan huomioon, että välitysilmoitus Pascalissa on pakollinen, eteenpäinviittaus (viittaus) on kielletty siinä.
Esimerkki viittauksesta eteenpäin C++:ssa:
luokka C { julkinen : void mutaattori ( int x ) { myArvo = x ; } int accessor () { return myValue ; } yksityinen : int myValue ; };Tässä esimerkissä myValue-attribuutilla on kaksi käyttöä ennen sen ilmoittamista. C++ ei yleensä salli ennakointia. Se on sallittu erityistapauksessa: luokan jäsenet. Attribuuttia muokkaavaa menetelmää ei voida kääntää ennen kuin kääntäjä tietää, että myValue on olemassa. Siksi on kääntäjän vastuulla muistaa menetelmän ilmoitus, kunnes se näkee myValue-ilmoituksen.
Eteenpäin suuntautuvien viitteiden (viitteiden) huolto voi lisätä kääntäjän monimutkaisuutta ja muistivaatimuksia huomattavasti. Tästä tulee yleensä esteenä kääntäjän toteuttamiselle yhdellä kertaa.