Hallo Forum, kann mir jemand bitte erklärren, für was die inline Deklartion bei Funktionen wichtig ist und wann ich diese einzusetzen habe. Vielen Dank Volker
Inlinefunktionen werden immer direkt, ohne Sprünge vom Comiler in den Assembler/Maschinen Code geschrieben. Sie sollen dann eingestzt werden, wenn es um zeitkritische Operationen geht.
Hallo Hubert, danke für die schnelle Antwort, aber wann weiß ich ob meine Funktion zeitkritisch ist oder nicht. wenn ich jetzt erstmal die funktion ganz normal schreibe ohne inline und nur feststelle es geht nichts wie soll ich dann auf die Idee kommen halt ich muß ja inline verwenden. Danke für eine Antwort und Gruß Volker
Du darfts nicht vergessen, das eine Inline-Funktion direkt geschrieben wird, d.h. sie wird nicht kopiert, braucht also mehr Platz im Programmspeicher. Was zeitkritisch ist, mußt du von Fall zu Fall unterscheiden. Eine Funktion die schnell etwas darstellen soll (Windows-like, z.B. Draw-Funktionen) würde ich inline machen. Wenn Du ein Programm neu schreibst brauchst Du zunächst keine Inlines. Aber zwecks Optimierung sollte man sich schon Gedanken machen. Mit viel Erfahrung wählst du dann inline oder nicht inline. Und programmierung ist halt viel Erfahrung.
Ich habe gerade das Problem, dass das Prog ohne inline nicht richtig abläuft, also er (der Controller) aus manchen Funktionen nichtmehr "rauskommt". Wenn ich jede Fkt. inline deklariere, funktioniert es zwar, aber dann ist der Speicher viel zu schnell voll. Was kann ich da machen?
Crossposts sind immer noch nicht gern gesehen: http://www.roboternetz.de/phpBB2/viewtopic.php?t=9817 Dort wurde das Problem bereits gelöst. Unterlass bitte das Crossposting, poste aber wenigstens, wenn du das Problem lösen konntest.
Du hast vollkommen recht, was auch immer "crossposts" sind. Das Post auf Roboternetz.de war auch von mir. Habe halt das gute alte Breitschwert ausgepackt ohne hinterher zu wissen, wo ich zugeschlagen habe. Woher kann ich denn auch wissen, dass alles so stark miteinander verwoben ist, dass es hier Leute gibt, die verschiedene Foren (und die Posts darin) miteinander vergleichen und aufeinander abstimmen. Aber ja, das Problem ist gelöst: ich hab falsch compiliert. Nämlich statt für den verbauten ATmega8 für den ATmega32.
Hi nur um das ursprüngliche Thema nochmal aufzugreifen: Inline sollte man nicht grundsätzlich bei zeitkritischen Funktionen eingesetzt werden. Inline-Funktionen sind eher da geeignet wo das Verhältnis aus Funktionsaufruf und eigentlichem Funktionsrumpf schlecht ist. Typisches Beispiel sind getter/setter-Methoden einer Klasse. Dort benötigt der Funktionsaufruf soviel mehr Laufzeit als die eigentliche Funktion das sich der Aufruf einfach nicht lohnt. Eine Draw-Methode würde ich grade nicht inline machen da sie reichlich komplex seion dürfte was den Code aufbläht und an der Laufzeit fast nichts ändert da der eigentliche Rumpf ein Vielfaches der Laufzeit des Aufrufes benötigt. Matthias
> Du hast vollkommen recht, was auch immer "crossposts" sind. Als Crossposts werden identische (oder sehr ähnliche und zeitnahe) Posts in verschiedene Foren bezeichnet. Crossposts sind eigentlich in keinem Forum gern gesehen. http://www.lugbz.org/documents/smart-questions_de.html#forum
Um Code zu sparen deklariere ich "init" Funktionen auch inline, da sie eh nur einmal aufgerufen werden.
Und wie kommst Du auf die Idee, daß das Code sparen soll?
GENAU ;) Nicht viel aber immerhin. Wenn du noch Variablen bei der Initfunktion übergibts können es auch ein paar bytes mehr werden.
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.