Toiminnon prototyyppi - Function prototype

Vuonna ohjelmointi , eli toiminto prototyyppi tai toiminto rajapintana on julistus on toiminto , joka määrittää funktion nimi ja tyyppi allekirjoitus ( arity , tietotyypit ja muuttujat , ja palautuva ), mutta laiminlyö toiminto elin. Vaikka funktion määritelmä määrittää, miten funktio tekee sen ("toteutuksen"), funktion prototyyppi vain määrittää sen käyttöliittymän eli mitä tietotyyppejä tulee sisään ja ulos. Termi toiminto prototyyppi käytetään erityisesti yhteydessä ohjelmointikielet C ja C ++: missä asettamalla eteenpäin ilmoitusten funktiomatriisin header-tiedostot mahdollistaa jakaminen ohjelman osaksi käännösyksiköt eli osiin, että kääntäjä voi erikseen kääntää objektitiedostot , olla Yhdistetyt jonka linkkeri osaksi suoritettavan tai kirjasto .

Prototyypissä parametrien nimet ovat valinnaisia ​​(ja C/C ++: ssa on funktion prototyyppialue, eli niiden laajuus päättyy prototyypin loppuun), mutta tyyppi on välttämätön kaikkien muuttujien kanssa (esim. Jos se on osoitin tai viittaus const -parametriin ) paitsi Const.

Vuonna olio-ohjelmointi , rajapinnat ja abstrakteja menetelmiä palvella paljon samaa tarkoitusta.

Esimerkki

Harkitse seuraavaa funktion prototyyppiä:

void Sum( int a, int b );

TAI

void Sum( int, int );

Ensinnäkin funktion prototyyppeihin kuuluu funktion allekirjoitus, funktion nimi, palautustyyppi ja käyttöoikeus. Tässä tapauksessa funktion nimi on "Sum". Funktion allekirjoitus määrittää parametrien määrän ja niiden tyypit. Yllä olevassa esimerkissä palautustyyppi on "mitätön". Tämä tarkoittaa, että toiminto ei palauta mitään arvoa. Huomaa, että ensimmäisen esimerkin parametrien nimet ovat valinnaisia.

Käyttää

C: n aiemmissa versioissa, jos funktiota ei ollut aiemmin ilmoitettu ja sen nimi esiintyi lausekkeessa, jota seurasi vasen sulu, se ilmoitettiin implisiittisesti funktiona, joka palauttaa intja sen argumentteista ei oletettu mitään. Tässä tapauksessa kääntäjä ei pystyisi suorittamaan argumenttien lukumäärän ja tyypin (tyyppien) kelpoisuustarkistusta koko ajan, mikä voi aiheuttaa ongelmia. Seuraava koodi havainnollistaa tilannetta, jossa implisiittisesti ilmoitetun toiminnon käyttäytymistä ei ole määritelty .

#include <stdio.h>

/* If this prototype is provided, the compiler will catch the error in
 * |main|. If it is omitted, then the error may go unnoticed.
 */
int MyFunction(int n);  /* Prototype */

int main( void )  /* Calling function */
{
  printf("%d\n", MyFunction());  /* Error: forgot argument to MyFunction */
  return 0;
}

int MyFunction( int n )  /* Called function definition */
{
  if (n == 0)
  {
    return 1;
  }
  else
  {
    return n * MyFunction(n - 1);
  }
}

Funktio MyFunction odottaa kokonaislukuargumentin olevan pinossa tai rekisterissä, kun sitä kutsutaan. Jos prototyyppi jätetään pois, kääntäjä ei voi mitenkään valvoa tätä ja MyFunction päätyy toimimaan jossakin muussa pinon datumissa (mahdollisesti palautusosoite tai muuttujan arvo, joka ei tällä hetkellä ole laajuudessa ). Kun sisällytät funktion prototyypin, ilmoitat kääntäjälle, että funktio MyFunction ottaa yhden kokonaisluvun argumentin ja annat kääntäjän havaita tällaiset virheet ja tehdä kokoamisprosessin sujuvasti. Tämä ominaisuus poistettiin C99 -standardista, joten toiminnon prototyypin jättäminen pois johtaa kääntämisvirheeseen.

Kirjastorajapintojen luominen

Asettamalla toiminto prototyyppejä on otsikkotiedosto , voidaan määrittää rajapinnan varten kirjasto .

Luokan ilmoitus

C ++: ssa funktion prototyyppejä käytetään myös luokkien määritelmissä.

Katso myös

Viitteet

  • Kernighan, Brian W .; Ritchie Afree, Dennis M. (1988). C -ohjelmointikieli (2. painos). Upper Saddle River, NJ: Prentice Hall PTR. ISBN 0-13-110362-8.