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
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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.