Forum: Mikrocontroller und Digitale Elektronik inline und extern.von ulis mmc.h


von roboterheld (Gast)


Lesenswert?

diese ausdrücke befinden sich unter anderem in der mmc.h von uli.
was bedeutet diese "inline und extern"?

inline void mmc_write_byte(U08);
extern void mmc_read_block(U08 *,U08 *,U16);

mfg

von Karl H. (kbuchegg)


Lesenswert?

roboterheld wrote:
> diese ausdrücke befinden sich unter anderem in der mmc.h von uli.
> was bedeutet diese "inline und extern"?
>
> inline void mmc_write_byte(U08);
> extern void mmc_read_block(U08 *,U08 *,U16);
>
> mfg

Das inline ist so etwas deplaziert, es sei denn in weiterer
Folge wird in diesem File noch die Implementierung dieser
Funktion angeführt.

Inline bedeutet, dass der Compiler den tatsächlichen Funktions-
aufruf durch den Inhalt der Funktion ersetzten soll.

Bsp:
1
inline int add( int a, int b )
2
{
3
  return a + b;
4
}
5
6
int main()
7
{
8
  int c;
9
10
  c = add( 4, 5 );
11
}

Durch das inline wird der Compiler angehalten, anstelle des
Funtionsaufrufes die tatsächliche Funktion einzusetzen.
In diesem Fall ist das gleichwertig wie wenn man geschrieben
hätte
1
int main()
2
{
3
  int c;
4
5
  c = 4 + 5;
6
}

Man beachte:
Damit der Compiler inlinen kann, muss er natürlich den Funktions-
inhalt kennen. Wenn da nur stehen würde
1
inline int add( int a, int b );
2
3
int main()
4
{
5
  int c;
6
7
  c = add( 4, 5 );
8
}

dann wird sich der Compiler mit dem inlinen schwer tun :-)

Zum extern:
Der ist an dieser Stelle ziemlich unnötig und kennzeichnet lediglich,
dass diese Funktion an einer anderen Stelle implementiert ist,
das es sich hier also nicht um eine Definition einer Funktion
sondern um eine Deklaration handelt. Der Compiler kann aber bei
Funktionen auch so erkennen, dass es sich um eine Deklaration
(einen sog. Protoypen) handelt und benötigt das extern nicht
explizit. Es schadet allerdings auch nichts.

von Sphinx (Gast)


Lesenswert?

Inline bedeutet meiner Meinung nach, dass der Funktionsaufruf durch den 
Code der Funktion ersetzt wird. Das soll die Zeit für den Branch etc. 
sparen.
Manche Compiler ignorieren dieses Schlüsselwort jedoch!

Extern sagt dem Compiler, dass die Funtkion in einer anderen C Datei 
implementiert wurde.

Schönen Gruss!

von roboterheld (Gast)


Lesenswert?

jup,danke.

mfg

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.