Funcții încorporate (inline-funcție) la c, purecodecpp
Măsurat filosofic - cantitatea de cod pentru a inline funcția crescută. În loc de o singură funcție linie numesc corpul ei, substituitul in loc de asteptare. Ea a dat la fel de mult ca 6 rânduri. Deci, va fi într-un program compilat - numărul de operatori vor crește de multe ori - de la fel de mult ca operatorii din organism funcție, și cât de mult timp a intrat în program.
Ie diferența dintre funcția inline și funcția normală - duplicarea codului funcției corpului ori de câte ori este implicat. În funcție normală, corpul său este într-un singur exemplar în aceeași locație în cadrul programului.
În cazul în care este beneficiul aici vă întreb? Economisirea timpului de procesare pentru sărituri un apel în funcțiile corpului. În cazul în care funcția este foarte mare, și este utilizat în mai multe locuri, apoi inline se dovedește nu în întregime benefică. Cu toate acestea, în cazul în care funcția (corpul ei) este mic, cu un număr minim de operatori pentru a rezolva problemele din zilele vechi a fost mai ușor să renunțe la salt și doar să le înlocuiască în locul potrivit, ca programator le-a descris acolo.
Orice ar fi fost, în condițiile de viață și chiar și pe computerele moderne, programe care utilizează funcția inline în loc de asteptare a corpului de substituție, nici un fel de beneficii speciale. Prin urmare, utilizarea acestui tip de funcții este necesară foarte des. IMHO, este în slava muzeului. Deși, să fiu sincer, această abordare este să dea roade pentru cei care programează controlorii, procesoare și alte bucăți de fier. Dar există particularitățile sale proprii și propria abordare, și du-te în faptul că acum nu este în valoare de ea. Utilizați funcția de built-in (funcția inline) sau nu - este de până la programator. De la mine pot să adaug doar un singur lucru - nu-l face acolo, în cazul în care nu este necesar pentru locuri de muncă.
Olej.
> De aceea, pentru a utiliza acest tip de funcții este necesară foarte des.
Utilizați funcțiile inline trebuie, evident, să fie utilizate, poate nu atât de des. Dar ele sunt masiv folosite implicit la determinarea claselor și sunt create obiecte:
- orice metodă funcție, definiția MDM este în definiția de clasa sa, devine calificativul implicit inline.
In exemplul clasei definind 2D puncte (în plan):
Olej.
Un alt „detaliu“: funcții cu linie de calificare funcționează bine, dar atâta timp cât definiția funcției și apelul se află în același fișier cu cod. Odată cu creșterea proiectului, este necesar să se împartă codul în mai multe fișiere (kompilyaiya separat cu legarea de fișiere obiect ulterioare), și va crea probleme enorme în găsirea erori: funcții inline nu sunt potrivite pentru conectarea externă.
inline - este determinantul macro și nu sunt potrivite pentru legarea externă (legarea).
Olej.
> Acest tip de funcții utilizate de fapt, nu numai în C, iar la momentul respectiv, se justifică elegant.
În standard limbajul C, nu există nici un cuvânt cheie în linie, în cazul în care astfel de lucruri sunt vândute prin intermediul macro-uri #define parametrizate.
Unele inline compilatoare C mai târziu, dar numai pentru pdderzhaniya sovmestimsoti cu C ++.
Prin urmare, în principiu, greșit să spunem că inline este împrumutat de la C, acest lucru - pur C ++ achiziție.
De aceea, aș aici „rollicking“ start ejecție.
Și eu nu sunt făcând aluzie la standardul. Am făcut aluzie la Hll. Pascal, de asemenea, astfel de caracteristici acolo. Și în BASIC pare să fi fost ceva de genul că, în vederile sale ulterioare.
Olej.
> Acest tip de funcții utilizate de fapt, nu numai în C
Olej.
Cu privire la problema compatibilității C și C ++ ... în ceea ce privește inline:
Olej.
Când l-am scris, nu am vrut să intru în detalii specifice, astfel încât să nu obstrucționeze chiar esența lor. Nu e de mirare Internetul este de obicei „mnogabukaf“, care de multe ori se umflă conținut în salată Oh-Livyo.