Forum: Compiler & IDEs wo werden inline-Funktionen korrekt definiert?


von Marin H. (Gast)


Lesenswert?

Hallo zusammen,

ich möchte in meinem Code zwecks der Übersicht kleine inline-Funktionen, 
also solche, die der Compiler auflösen und in den Code einbauen darf 
(wie ein Präprozessor-Makro es machen würde), programmieren.
Nun hab ich sie wie jede Funktion in foo.h deklariert
( mit inline void function( void ); ) und in foo.c definiert
( mit inline void function( void ) {...} ).
Leider produzierte das Fehlermeldungen. Ich hab dann in der foo.h den 
prefix inline gelöscht woraufhin alles offensichtlich lief. Nun lese ich 
in
http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.6
, vorausgesetzt ich vertehe es richtig, dass man die funktion wohl in 
foo.h definieren MUSS und in der foo.c taucht sie dann also nicht mehr 
auf.

Ist das richtig so? oder wie gehts korrekt?

Vielen Dank
MfG Martin

von Der E. (rogie)


Lesenswert?

Wenn die Funktion inline sein soll, musst du sie auch gleich bei der 
Deklaration implementieren, also so in der .h Datei:
1
inline void foo(void)
2
{
3
  //der code
4
}

Mal ein konkretes Beispiel:
1
inline float mm2Zoll(float value)
2
{
3
  return value / 25.4;
4
}

von Oliver (Gast)


Lesenswert?

Marin H. schrieb:
> dass man die funktion wohl in
> foo.h definieren MUSS und in der foo.c taucht sie dann also nicht mehr
> auf.

Müssen muß man nicht. Das header-file wird ja nur an Stelle des 
#include-Befehls ins c-File einfgefügt, ergo kannst du die 
inline-Funktiona auch direkt ins c-file einfügen. Solange die Funktion 
nur in diesem einen C-File verwendet wird, ist das sogar die bessere 
Variante.

Willst du die Funktion in mehreren C-Files inline nutzen, muß der Code 
natürlich komplett ins header-File.

Wenn du, wie im Moment, die Funktion im header-File ohne inline 
deklarierts, und den Code im C-File mit inline ausführst, wird innerhalb 
dieses einen C-Files der Code ge-inlined. Zusätzlich wird die Funktion 
aber auch noch als normale Funktion angelegt, die dann aus anderen 
C-Files aufgerufen werden kann.

Oliver

von Marin H. (Gast)


Lesenswert?

Ah so ist das. DANKE!

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


Lesenswert?

Bitte immer "static inline", nicht einfach nur "inline".

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.