Forum: Compiler & IDEs was heisst eigentlich "inline"


von karlheinz (Gast)


Lesenswert?

inline void mmc_write_byte (U08 Byte)

was heisst das linine in winavr-c.


mfg karlheinz

von bone (Gast)


Lesenswert?

das ist eigentlich wie ein macro...

dh. wenn du mmc_write_byt(xy) aufrufst, springt das programm nicht zu
der Funktion, sondern der quellcode der fuktion wird an dieser stelle
eingefügt...

das programm wird meist dadurch länger (codegrösse) aber schneller
(meistens zumindest)...

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

das ist nicht zwingend. Der C-Standard schreibt dazu:

A function declared with an inline function specifier is an inline
function. The function specifier may appear more than once; the
behavior is the same as if it appeared only once. Making a function an
inline function suggests that calls to the function be as fast as
possible. The extent to which such suggestions are effective is
implementation-defined.

Matthias

von bone (Gast)


Lesenswert?

@matthias:

:-) danke, das stimmt... im grossen und ganzen nur ein wunsch an den
compiler diesen teil zu beschleunigen :-)

winavr-c ist jedoch der gcc somit habe ich den schritt in die spec des
gcc gewagt, und da steht:
By declaring a function inline, you can direct GCC to integrate that
function's code into the code for its callers. This makes execution
faster by eliminating the function-call overhead;

von Christian O. (derbrain)


Lesenswert?

Ich habe mir gerade (relativ komplexe) Beispiel-Software für einen
ATmega angeschaut (von Atmel selbst) und mich gewundert, dass die kein
einziges inline verwenden. Macht das der Compiler selbst?
Ich meine, Initialisierungsfunktionen etc. werden ja meist nur einmal
ausgeführt und werden ja nur der Übersichtlichkeit halber vom
Hauptprogramm getrennt, oder?
Grüße
Christian

von Karl H. (kbuchegg)


Lesenswert?

Grade bei Initialisierungsfunktionen macht inline meist
relativ wenig Sinn. Durch inline moechte man ja den call-
overhead einsparen. Wird eine Funktion nur einmal aufgerufen,
dann ist dieser Overhead auch kein wirkliches Problem, da er
ja nur einmal auftritt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Unnötig ist er trotzdem.

Der GCC inlinet als "static" deklarierte Funktionen bei -Os
durchaus selbstständig.  Ist nicht jedermann's Sache, da das
im Debugger natürlich lustig aussieht, wenn man im Einzelschritt
durchgeht.  "step out" funktioniert dann meist auch nicht mehr
so, wie man sich das vorstellt...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.