Forum: Mikrocontroller und Digitale Elektronik inline function definieren


von Christoph M. (chrito)


Lesenswert?

Hallo Zusammen!

Kann es sein, dass es Compiler gibt, die keine inline Funktionen 
unterstützen oder verwende ich das falsche Schlüsselwort?
1
inline void Test(unsigned char a)
2
{ 
3
 b+=10*a;
4
}
5
6
Test (10);

... das hier funktioniert nicht, er zeigt Syntax Error an.
Der Compiler ist MCC18 v3.38 (Microchip C18 Compiler)

Ich möchte mir den Funktions-Overhead sparen und zudem, dass er alle zur 
Compile-Zeit bekannten Operationen vorher erledigt (z.B. das 10*10).

Mit Makros geht das ja auch, aber man kann keine Prototypen in den 
Header setzen, muss also die Makros immer oberhalb des aufrufenden Teils 
schreiben, mit inline wäre es schon schöner...

Danke für Tipps!
Viele Grüße,
Christoph

von Achim M. (minifloat)


Lesenswert?

probier 'mal
1
_inline
mfg mf

von Noname (Gast)


Lesenswert?

Hm. Dein Posting hat zwei Nachteile.
1. Dein Code ist nicht kompilierbar, so das der Fehler auch auftritt.
2. Du schreibst nicht welche Fehlermeldung auftritt und auf welche Zeile 
sie sich bezieht.

Abgesehn von dem Underscore-Inline, was eine Spezialität des Microchip 
C18 Compilers sein mag, bleiben verschiedene Möglichkeiten.
Hast Du z.B. beachtet das inline-Fúnktionen in dem selben Modul 
definiert werden müssen, in dem sie angewendet werden sollen?
Es gibt also kein "extern inline" oder so etwas.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

"b" ist undefiniert.

C ist keine Skiptsprache. Ergo:

Der Aufruf von "Test" kann nur aus eine Funktion heraus erfolgen.

von Achim M. (minifloat)


Lesenswert?

Noname schrieb:
> das inline-Fúnktionen in dem selben Modul
> definiert werden müssen, in dem sie angewendet werden sollen?
> Es gibt also kein "extern inline" oder so etwas.

Da kann man ja auch ein .h zur .c erstellen, den man dann auch gern 
woanders einbinden kann. Aber immer schön mit dem Rahmen...
1
// PROJECT: foo
2
// MODULE:  bar header
3
// FILE:    bar.h
4
// AUTHOR:  Me on 6 Mar 2012
5
6
#ifndef BAR_H_DEFINED
7
#define BAR_H_DEFINED
8
9
// All Stuff goes here...
10
11
#endif // BAR_H_DEFINED
12
// End of File bar.h
...damit es keine Fehler gibt, wenn der Header zweimal eingebunden wird.
mfg mf

von Ben j. (scarab)


Lesenswert?

in IAR EWB kann man inline z.b. mit nem #pragma erzwingen
(viele Compiler entscheiden selbst wann inline sinnvoll ist und wann 
nicht, das soll aber nicht heißen das du es nicht erzwingen darfst wenn 
du es willst ;) )
einfach mal im manual nachschauen

von Noname (Gast)


Lesenswert?

Mini Float schrieb:
> Noname schrieb:
>> das inline-Fúnktionen in dem selben Modul
>> definiert werden müssen, in dem sie angewendet werden sollen?
>> Es gibt also kein "extern inline" oder so etwas.
>
> Da kann man ja auch ein .h zur .c erstellen, den man dann auch gern
> woanders einbinden kann. Aber immer schön mit dem Rahmen...

Sicher. Dann ist es im selben Modul. Das die Definition der 
inline-Funktion zwingend im selben File sein muss, hab ich ja nicht 
geschrieben.

von Christoph M. (chrito)


Lesenswert?

Danke für eure Tipps!
1
_inline
 geht leider auch nicht... Nachgelesen und alles überprüft. Das Ding 
ist,

*** Der C18 Compiler kann kein inline ***

Misti mist. Naja, man kann stattdessen Macros verwenden...

Grüße,
Christoph

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.