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