Jokainen C-ohjelma on kokoelma funktioita. Ota selvää näistä hyödyllisistä uudelleenkäytettävistä koodipaloista, niiden määrittämisestä ja mitä tyhjyys tarkoittaa.
Olet ehkä käsitellyt C-perussyntaksia yksinkertaisilla esimerkeillä ja mietit nyt, kuinka voit luoda suurempia, todellisia ohjelmia. Aluksi sinun kannattaa järjestää koodisi tehokkaiksi osiin mahdollisimman vähäisellä toistolla. C: ssä, kuten useimmissa kielissä, vastaus ongelmiisi on funktio.
Toimintojen luominen ja käyttäminen C: ssä on yksinkertaista ja tuo monia etuja. Toimintojen avulla voit jakaa monimutkaiset ohjelmat pienempiin osiin. Ne tarjoavat uudelleenkäytettävyyden sekä alkuperäisessä ohjelmassasi että siihen liittyvissä kirjastoissa tai muissa erillisissä ohjelmissa.
Aloitaksesi sinun on opittava funktion määrittelyistä, prototyypeistä, parametreista ja paluulausekkeista.
Mitä funktiot ovat C: ssä?
C-ohjelmoinnissa, funktio on nimetty koodin osa, joka tekee jotain, kun sitä pyydetään. Se auttaa pitämään koodisi järjestyksessä ja antaa sinun käyttää samaa toimintoa useita kertoja toistamatta itseäsi.
Yksinkertaisin esimerkki on jo käyttämäsi esimerkki: main()-funktio. Päätoiminto on erityisen erityinen, koska se toimii minkä tahansa C-ohjelman pääsisääntulopisteenä. Voit myös käyttää kirjastofunktioita, jotka ovat jonkun muun jo kirjoittamia, tai voit kirjoittaa omia käyttäjän määrittämiä funktioita.
Toiminnot: ilmoittaminen, määrittely ja kutsuminen
Nämä kolme näkökohtaa ovat olennaisia funktioiden käytössä.
Toimintoilmoitus
Tämä antaa tietoja funktion nimestä, palautustyypistä ja parametreista, mikä mahdollistaa sen käytön ennen sen täydellistä määrittelyä. Sitä kutsutaan myös funktion prototyypiksi. Se noudattaa tätä yksinkertaista syntaksia:
return_type function_name(parameters);
Missä:
- palautustyyppi on funktion palauttaman arvon tietotyyppi. Se voi olla mikä tahansa kelvollinen C-tietotyyppi tai mitätön jos funktio ei palauta arvoa.
- funktion_nimi on nimi, jonka annat funktiolle. Käytä tätä funktion kutsumiseen myöhemmin.
- parametrit on luettelo syöteparametreista, jotka funktio hyväksyy, jos sellaisia on. Jokainen parametri koostuu tietotyypistä, jota seuraa pilkuilla erotettu parametrin nimi.
Esimerkiksi tässä on yksinkertainen funktion ilmoitus:
intadd(int a, int b);
Toiminnon määritelmä
Kun kutsut funktiota, se suorittaa määrittelyssään määritellyn koodin. Se sisältää funktion nimen, palautustyypin, parametriluettelon ja lausekkeet, jotka määrittävät sen toiminnan. Tässä on syntaksi:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Puretaan syntaksin osia:
Toimintorunko: Tämä on koodilohko, joka on suljettu aaltosulkeisiin {}. Se sisältää ohjeet, jotka määrittelevät, mitä funktio tekee, kun sitä kutsutaan.
Palautusilmoitus: Jos funktiolla on muu palautustyyppi kuin mitätön, palata lauseke lähettää arvon takaisin soittajalle. Tämän arvon tulee vastata määritettyä palautustyyppiä.
Tässä on yksinkertainen esimerkki funktion määritelmästä:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Toimintokutsu
Aivan kuten ruoanlaitossa, sinulla voi olla resepti (funktion määritelmä) ja joitain ainesosia (argumentteja), mutta sinun on silti noudatettava ohjeita saadaksesi tuloksen. Funktiokutsu suorittaa funktion annetuilla argumenteilla; tässä syntaksi:
return_type result = function_name(arguments);
argumentteja: Nämä ovat arvoja tai lausekkeita, jotka välität funktiolle syötteinä. Erottele jokainen argumentti pilkulla. Argumenttien lukumäärän, järjestyksen ja tietotyyppien tulee vastata funktion parametriluetteloa.
tulos: Jos funktiolla on muu palautustyyppi kuin mitätön, voit siepata palautetun arvon käyttämällä sopivaa tietotyyppiä olevaa muuttujaa.
Tässä on esimerkki funktiokutsusta:
#include
// Function prototype
intadd(int a, int b);intmain(){
int x = 5, y = 3;// Call the function and store the result in 'sum'
int sum = add(x, y);
printf("The sum of %d and %d is %d\n", x, y, sum);
return0;
}
// Function definition
intadd(int a, int b){
return a + b;
}
Seuraamalla näitä kolmea vaihetta – funktion ilmoittaminen, sen toteutus ja kutsuminen sopivilla argumenteilla – voit käyttää toimintoja tehokkaasti erilaisten tehtävien suorittamiseen ohjelmoida.
Toimintoparametrit ja palautusarvot
Parametrit ovat funktion ilmoituksessa tai määrittelyssä ilmoitettuja muuttujia, jotka toimivat funktiolle kutsuttaessa välitettävien arvojen paikkamerkkeinä. Niiden avulla voit siirtää tietoja toimintoon, jolloin se voi työskennellä tietojen kanssa ja käsitellä niitä. Paluuarvot ovat arvoja, jotka funktio tuottaa ja lähettää takaisin soittajalle.
Parametrien välittämiseen on kaksi tapaa.
Ohita arvo
Tällä lähestymistavalla funktiokutsu kopioi todellisen argumentin arvon funktion parametriin. Funktiossa parametriin tehdyt muutokset eivät vaikuta alkuperäiseen argumenttiin.
Esimerkiksi:
#include
intsquare(int num){
num = num * num;
return num;
}intmain(){
int x = 5;
int y = square(x);// Output: x and y after function call: 5 25
printf("x and y after function call: %d %d\n", x, y);
return0;
}
- Neliöfunktio ottaa kokonaislukuparametrin, nro.
- Neliöfunktio laskee numeron neliön, päivittää sen arvon ja palauttaa tämän uuden arvon.
- Pääfunktio ilmoittaa kokonaislukumuuttujan, x, ja antaa sille arvon 5.
- Sitten se kutsuu neliöfunktiota ja välittää sille x: n arvon. Se määrittää tuloksen toiselle muuttujalle, y.
- Funktion kutsun jälkeen main tulostaa x: n ja y: n arvot. X-arvo pysyy samana, koska num-parametrin muuttaminen neliön sisällä ei vaikuta alkuperäiseen x: ään.
Ohita viite
Tätä lähestymistapaa käyttämällä välität arvon muistiosoitteen (osoittimen) funktiolle. Parametriin tehdyt muutokset funktion sisällä vaikuttavat alkuperäiseen arvoon sen ulkopuolella.
Osoittimet, mukaan lukien niiden käyttö parametreina, ovat yksi näkökohdista C, jotka tekevät siitä erilaisen kuin Pythonin kaltainen kieli.
#include
voidsquare(int *num){
*num = *num * *num;
}intmain(){
int x = 5;
square(&x);
// Output: x after function call: 25
printf("x after function call: %d\n", x);
return0;
}
- The neliö funktio ottaa kokonaisluvun osoittimen (int *) parametri, nro. Se ei palauta arvoa.
- Neliöfunktio laskee arvon neliön nro sisältää ja päivittää tämän arvon käyttämällä osoittimen viittausoperaattoria, *.
- The pää funktio ilmoittaa kokonaislukumuuttujan, x, ja antaa sille arvon 5.
- Sitten se kutsuu neliö toiminto osoittimella x käyttämällä operaattorin osoitetta: &x.
- Funktion kutsun jälkeen main tulostaa arvon x, joka on nyt 25 muutoksista lähtien *nm sisällä neliö toiminto vaikuttaa alkuperäiseen x.
Yhteenvetona voidaan todeta, että avainero näiden kahden menetelmän välillä on se, kuinka funktion sisällä olevan parametrin muutokset vaikuttavat alkuperäiseen arvoon sen ulkopuolella. Ohitusarvo luo kopion, kun taas ohitus (osoitin) mahdollistaa alkuperäisen arvon suoran manipuloinnin.
Muilla kielillä on usein vastine C: n osoittimille, mutta ne toimivat yleensä korkeammalla tasolla. Yksi esimerkki on C#:n tuki out-muuttujille.
Tyhjät toiminnot
Void-funktiot C-ohjelmoinnissa ovat toimintoja, jotka eivät palauta arvoa. Käytä niitä toimien tai tehtävien suorittamiseen ilman tulosta. He voivat muuttaa parametrejaan käyttämällä pass by reference -toimintoa, mutta heidän ei tarvitse tehdä sitä.
Tässä on esimerkki tyhjäfunktiosta:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Void-toiminnot ovat hyödyllisiä toimintojen suorittamiseen, viestien tulostamiseen, tietojen muokkaamiseen tai tehtävien suorittamiseen ilman palautusarvoa.
Tutustu C-ohjelmoinnin toimintoihin
Harjoittelu funktioiden luomisen kautta parantaa käsitystäsi C-ohjelmoinnin ymmärtämisestä ja soveltamisesta. Lisäksi se parantaa koodin luettavuutta ja helpottaa huoltoa. Sukella erilaisiin toimintosovelluksiin saadaksesi käyttöön niiden edut.
Kun olet oppinut C-funktioiden perusteet ja haluat haastaa itsesi, harkitse rekursioon perehtymistä.