www.mikrocontroller.net

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


Autor: Marin H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-funct...
, 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

Autor: Der Entwickler (rogie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Funktion inline sein soll, musst du sie auch gleich bei der 
Deklaration implementieren, also so in der .h Datei:
inline void foo(void)
{
  //der code
}

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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marin H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah so ist das. DANKE!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte immer "static inline", nicht einfach nur "inline".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.