Kezdőoldal » Számítástechnika » Programozás » Miért kell deklarálni egy...

Miért kell deklarálni egy függvényt?

Figyelt kérdés

Ha jól értem akkor ha megadjuk egy függvény definícióját a meghívás előtt akkor nem kell deklarálni. De milyen előnye van annak ha előre deklaráljuk?

Ezt találtam de nem értet: "Ebben az esetben fölöslegessé válik a deklaráció. Bár ez a módszer kis méretű programok esetében kiválóan használható, azért követendőnek semmiképpen nem nevezhető. Nagyobb programoknál ugyanis komoly problémákba ütközhetünk, ha a végrehajtás és a lefordíthatóság a függvények definíciójának sorrendjétől kezd függni. Összetett kódok esetében ilyenkor kibogozhatatlan függőségek alakulhatnak ki és soha nem lehetünk benne biztosak, hogy minden a megfelelő helyen és a megfelelő sorrendben van. Sokkal hasznosabb, ha mindent jó előre deklarálunk, hiszen a definíciók sorrendjétől való függést így automatikusan kiküszöböljük. "


2016. jan. 17. 10:22
 1/7 anonim ***** válasza:
Deklarálni azért kell, hogy a definiált változó ne null memóriaterületre mutasson. Null objektummal nem nagyon tudsz bármiféle műveletet végezni, ez nem primitív típus aminek van default értéke, lásd int, bool és egyéb számtípusok. Persze a statikus az megint más.
2016. jan. 17. 10:55
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

Azért kell előre deklarálni, mert a kód soronként kerül feldolgozásra, a függvényhívások, hol melyik függvényre hivatkozik valami sorról sorra van inicializálva. Ezért a fordító minden ponton csak azt érzékeli, arról van tudomása, amit előtte már deklaráltál. És ha a fordító elér egy olyan sorhoz, ahol olyan függvényt hívsz meg, amit addig nem deklaráltál, akkor bizony gebasz van, mert nem tudja hova kötni amit ott talál. Még húzósabb probléma, ha használsz overloadingot, esetleg template paramétereket is, és egy függvénynek 'több változata' is van a kódodban. Mondjuk van egy sor a kódban, ahol a Foo függvény B változatát akarod meghívni, de addig a pontig csak a A változatát deklaráltad/definiáltad. Ekkor a fordító értelemszerűen az A változathoz fogja kapcsolni amit talál, és nem is fog feltétlenül hibát jelezni neked. Csak utólag fog feltűnni, hogy futás közben valami nem stimmel.


Ezért szokás a függvényeket jó előre deklarálni.

2016. jan. 17. 11:10
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:

Amit idéztél, abban világosan ott van.

Jó szokás deklarálni azért, mert csak definíciónál figyelni kell a sorrendre: azaz ha a függvényeid egymást hívják (ami eléggé gyakori eset, kapásból a mainnel kezdve), akkor sorba kell őket rakni, ha pedig ketten egymást hívják, akkor deklaráció nélkül meg se tudod oldani.


A másik fontos ehhez még, hogy a header fájlokban általában csak deklaráció van rengeteg okból (pl. hogy ne kelljen mindig újra buildelni olyan függvényeket, amiken nem is változtatsz), és azok sem működnének enélkül.

2016. jan. 17. 11:20
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

"Ekkor a fordító értelemszerűen az A változathoz fogja kapcsolni amit talál, és nem is fog feltétlenül hibát jelezni neked."


Mutatnál nekem erre egy példát?

2016. jan. 17. 11:24
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:
Nem feltátlenül kell deklarálni a függvényeket, csak ajánlott.
2016. jan. 17. 12:09
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

#4


Szerintem ilyesmire gondolt:


void Foo(int);

//void Foo(short);


int main()

{

Foo(short(0));


std::cin.get();

}


void Foo(int)

{

std::cout << "int\n";

}


void Foo(short)

{

std::cout << "short\n";

}

2016. jan. 17. 14:25
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
Köszönöm szépen a válaszokat!
2016. jan. 17. 15:02

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!