Funktionen schreibt man ja, um Code mehrfach zu verwenden. Bei größeren Projekten gibts da immer wieder Probleme mit deren Reihenfolge wenn man in eigenen Funktionen andere eigene Funktionen aufruft. D.h. man kann eine Funktion nicht verwenden, bevor diese deklariert ist - was ja auch irgendwie logisch klingt. In der Praxis ist das aber immer wieder Anlass für Stress, die Functions in ihrer Reihenfolge im Code umzusortieren. Im "guten alten" Turbopascal, gab es dafür die Option "forward", um genau diesem Problem aus dem Wege zu gehen. Gibt es etwas Vergleichbares in C++?
Frank E. schrieb: > D.h. man kann > eine Funktion nicht verwenden, bevor diese deklariert ist - was ja auch > irgendwie logisch klingt. Deklaration einer Funktion in C++:
1 | void func(int a, int b); |
Definition einer Funktion in C++:
1 | void func(int a, int b) { |
2 | ...
|
3 | }
|
> In der Praxis ist das aber immer wieder Anlass für Stress, die Functions > in ihrer Reihenfolge im Code umzusortieren. Kenne keine Sprache, in der das je ein Problem ist oder war.
Frank E. schrieb: > C++ Die Verweise auf eine C Doku sind schon (fast) ok Beachten könnte man, dass sich C++ da etwas anders, als C, verhält. https://en.cppreference.com/w/cpp/language/function
Frank E. schrieb: > Funktionen schreibt man ja, um Code mehrfach zu verwenden. Nein: Funktionen schreibt man, um Code zu strukturieren (und damit leichter verständlich zu machen) und zu abstrahieren (bspw. UDT in C++). Beispiel: Interation zur Berechnung der Potenzreihe für sinus(x). Die Bedeutung von
1 | auto a = sin(x); |
2 | // weiter mit a
|
ist einfacher zu erfassen als (Details ausgelassen):
1 | float a = x; |
2 | uint64_t f = 1; |
3 | for(...) { |
4 | f *= (2 * i + 1); |
5 | float g = x / f; |
6 | g *= ...; |
7 | a += g; |
8 | }
|
9 | // weiter mit a
|
Ein schöner Nebeneffekt ist selbstverständlich die Wiederverwendbarkeit.
:
Bearbeitet durch User
Frank E. schrieb: > Funktionen schreibt man ja, um Code mehrfach zu verwenden. Eher, um auf Herz und Nieren geprüfte Grundbausteine für die Programmierung zur Verfügung zu haben und nicht jedes Mal das Rad neu erfinden zu müssen. Und natürlich, um die Komplexität der Testszenarien niedrig zu halten.
Funktionen schreibt man nicht, man sucht sich die passenden Header files im Arduino Forum ;)
Wolfgang schrieb: >> Funktionen schreibt man ja, um Code mehrfach zu verwenden. > Eher, um auf Herz und Nieren geprüfte Grundbausteine für die > Programmierung zur Verfügung zu haben und nicht jedes Mal das Rad neu > erfinden zu müssen. Man greift gerne auf fertige Funktionen zu, z.B. für das Display oder die Abfrage externer A/D-Wandler. Was Deine "auf Herz und Nieren geprüfte Grundbausteine" angeht, na ja - wenn da etwas faul ist, hat man es gleich in allen Anwendungen. Ein "Arduino" wird dann als Copy & Paste-Bastler beschimpft, während das in anderen Umgebungen wie Java gang und gäbe ist. Dazu passend direkt ein Kommentar: Alexander schrieb: > Funktionen schreibt man nicht, man sucht sich die passenden Header files > im Arduino Forum ;) Nicht zu vergessen: Wenn man Dinge mehrfach benötigt, z.B. Blitzen einer LED oder einen TastenPiep, kann man damit Platz im Programmspeicher sparen.
Manfred schrieb: > Ein "Arduino" wird dann als Copy & Paste-Bastler beschimpft, während das > in anderen Umgebungen wie Java gang und gäbe ist. Ach, lass mal gut sein... Arduino User schämen sich nicht wirklich, wenn sie fremden Code übernehmen und weiter verwenden. Gehört es doch geradezu, mit den Libraries, zum Konzept so zu handeln. Die C&P Vorhaltung ist also etwas absurd.
EAF schrieb: > Manfred schrieb: >> Ein "Arduino" wird dann als Copy & Paste-Bastler beschimpft, während das >> in anderen Umgebungen wie Java gang und gäbe ist. > > Ach, lass mal gut sein... > Arduino User schämen sich nicht wirklich, wenn sie fremden Code > übernehmen und weiter verwenden. Gehört es doch geradezu, mit den > Libraries, zum Konzept so zu handeln. > Die C&P Vorhaltung ist also etwas absurd. C/C++ Standard Library Users schämen sich nicht wirklich, wenn sie fremden Code übernehmen und weiter verwenden. Das einzige was fehlt um die Welt wieder ins Lot zu ruecken, ist eine eigene ISO/IEC-WorkingGroup fuer das "Arduino-Gedöns". Dann Budda bei de Fische, neh?
Habe das mit den Prototypen jetz mal ausprobiert, funzt. Ist das wirlklich immer so einfach, oder gibts da noch irgendwelche Fettnäpfe bzw. Tretminen auf die man achten sollte?
Frank E. schrieb: > Ist das wirlklich immer so einfach, oder gibts da noch irgendwelche > Fettnäpfe bzw. Tretminen auf die man achten sollte? Ja, nein! Bis auf: Mit C++ brauchts eigentlich kaum noch Funktionen. Da spielt die Musik in Namensräumen, und dort eher mit Methoden und Operatoren
EAF schrieb: > Frank E. schrieb: >> Ist das wirlklich immer so einfach, oder gibts da noch irgendwelche >> Fettnäpfe bzw. Tretminen auf die man achten sollte? > > Ja, nein! > > Bis auf: > Mit C++ brauchts eigentlich kaum noch Funktionen. > Da spielt die Musik in Namensräumen, und dort eher mit Methoden und > Operatoren Hmmm, wo ist der Unterschied zwischen Methoden und Funktionen? 🤔
Jens R. schrieb: > wo ist der Unterschied zwischen Methoden und Funktionen? 🤔 Methoden hängen nicht einfach so im kontextfreien Raum rum, sondern sind an/in einer Struktur/Klasse gebunden. Sie bekommen einen versteckten this Parameter übergeben.
EAF schrieb: > Jens R. schrieb: >> wo ist der Unterschied zwischen Methoden und Funktionen? 🤔 > > Methoden hängen nicht einfach so im kontextfreien Raum rum, sondern sind > an/in einer Struktur/Klasse gebunden. Der war genial. Funktionen heißen Funktion, weil sie eine Funktion ausführen. Auch in C sollten Funktionen nicht im "kontextfreien Raum" herum hängen. Weil eine Funktion eine bestimmte Aufgabe erfüllen sollte. Den Begriff Methoden nutzt man in der objektorientierten Programmierung weil da die "Funktion" eines Objektes eben dessen methodische Arbeiten darstellt. Aber vom Aufbau ist auch eine Methode immer eine Funktion. Mit dem organisatorischen Pluspunkt, dass diese Funktion eben einem festen Objekt zu geordnet ist. Diese Zuordnung wird der Kontext sein, den du meinst. > Sie bekommen einen versteckten this Parameter übergeben. Ersten ist "this" kein Parameter und erst recht nicht versteckt 🤷♂️ Ja man kann mit this auf das aufrufende Objekt verweisen und es als Pointer einem Parameter einer Methode übergeben. Man kann das aber auch jeder anderen Funktion (also ohne Zuordnung zu einem Objekt) übergeben. Aber zurück zu > Habe das mit den Prototypen jetz mal ausprobiert, funzt. Auch für die Methoden einer Klasse nutzt man Prototypen. Das Erste was man in C und C++ lernt sind eben Deklaration und Definition. Da gibt es keine Unterschiede.
Jens R. schrieb: > Diese Zuordnung wird der Kontext sein, > den du meinst. Du bist ja eine richtige Blitzbirne!
EAF schrieb: > Frank E. schrieb: >> Ist das wirlklich immer so einfach, oder gibts da noch irgendwelche >> Fettnäpfe bzw. Tretminen auf die man achten sollte? > > Ja, nein! > > Bis auf: > Mit C++ brauchts eigentlich kaum noch Funktionen. Steile These! In C++ spricht man nicht von Methoden, sondern von Elementfunktionen. Und im Gegensatz dazu von freien Funktionen.
Jens R. schrieb: > EAF schrieb: >> Frank E. schrieb: >>> Ist das wirlklich immer so einfach, oder gibts da noch irgendwelche >>> Fettnäpfe bzw. Tretminen auf die man achten sollte? >> >> Ja, nein! >> >> Bis auf: >> Mit C++ brauchts eigentlich kaum noch Funktionen. >> Da spielt die Musik in Namensräumen, und dort eher mit Methoden und >> Operatoren > > Hmmm, wo ist der Unterschied zwischen Methoden und Funktionen? 🤔 Es gibt keinen, nur nennt man Funktionen als Elemente von Klassen eben Element-Funktion in C++.
Jens R. schrieb: >> Sie bekommen einen versteckten this Parameter übergeben. > Ersten ist "this" kein Parameter und erst recht nicht versteckt 🤷♂️ Bei non-statics unter der Haube schon.
Jens R. schrieb: >> Habe das mit den Prototypen jetz mal ausprobiert, funzt. > Auch für die Methoden einer Klasse nutzt man Prototypen. > Das Erste was man in C und C++ lernt sind eben Deklaration und > Definition. Da gibt es keine Unterschiede. Keine Unterschiede zwischen Deklaration und Definition? Ich glaube, hier wäre eine C/C++-Buch angebracht.
Wilhelm M. schrieb: > Jens R. schrieb: >>> Habe das mit den Prototypen jetz mal ausprobiert, funzt. >> Auch für die Methoden einer Klasse nutzt man Prototypen. >> Das Erste was man in C und C++ lernt sind eben Deklaration und >> Definition. Da gibt es keine Unterschiede. > > Keine Unterschiede zwischen Deklaration und Definition? Ich glaube, hier > wäre eine C/C++-Buch angebracht. Ich habe den Jens anders verstanden: "Was Deklaration und Definition angeht -- da gibt es keine Unterschiede zwischen C und C++". just my 2 ct
Jester schrieb: > Ich habe den Jens anders verstanden: "Was Deklaration und Definition > angeht -- da gibt es keine Unterschiede zwischen C und C++". Ok, danke für die Klarstellung.
>> Hmmm, wo ist der Unterschied zwischen Methoden und Funktionen? 🤔 > > Es gibt keinen, nur nennt man Funktionen als Elemente von Klassen eben > Element-Funktion in C++. Hallo Wilhelm, ich dachte immer du bist für knallharte Klarheit. Diese Antwort aus deinem Munde zu hören ist nun doch schon mehr als fragwürdig. Du reitest ansonsten auf den Begriffen rum wie kein anderer, auch hier bei Methoden vs. Elementfunktionen, willst aber im gleichem Atemzug keinen Unterschied zwischen Elementfunktionen und Funktionen kennen. Also ich bitte dich. Den Unterschied hat EAF in 2 Sätzen bezüglich Bindung auf den Punkt gebracht. Andere müssen dafür einen Roman schreiben, weil sie 2 einfache Sätze nicht verstanden haben. Ich meine wenn es keinen tieferen Unterschied geben würde, dann würden sie wohl kaum unterschiedlich benannt werden bzw. gebe es keine begriffliche Trennung auf die du sonst so viel wert legst. Bin ein klein wenig enttäuscht über deine Aussage. Nichts für Ungut ...
:
Bearbeitet durch User
Veit D. schrieb: >>> Hmmm, wo ist der Unterschied zwischen Methoden und Funktionen? 🤔 >> >> Es gibt keinen, nur nennt man Funktionen als Elemente von Klassen eben >> Element-Funktion in C++. > > Hallo Wilhelm, > > ich dachte immer du bist für knallharte Klarheit. Diese Antwort aus > deinem Munde zu hören ist nun doch schon mehr als fragwürdig. Du reitest > ansonsten auf den Begriffen rum wie kein anderer, auch hier bei Methoden > vs. Elementfunktionen, willst aber im gleichem Atemzug keinen > Unterschied zwischen Elementfunktionen und Funktionen kennen. Gut, Du hast mich der Sünde der kurzen Rede überführt ;-) Ich hatte >>> Hmmm, wo ist der Unterschied zwischen Methoden und Funktionen? den Satz so verstanden, dass hier der Begriff Funktion eben als Elementfunktion zu lesen ist, wie man das eben manchmal so macht: die Funktion bla() in X (gemeint ist die Elementfunktion der Klasse X). Und den von Dir angesprochenen Unterschied hatte ich im Beitrag davor genannt. Wilhelm M. schrieb: > In C++ spricht man nicht von Methoden, sondern von Elementfunktionen. > Und im Gegensatz dazu von freien Funktionen. Insofern denke ich, dass das jetzt klar ist. Der Begriff Methode ist eben ein grundlegender Begriff aus der OOP. In Java hat man den dann auch so übernommen, in C++ eben nicht, weil C++ mehr als nur das OOP-Paradigma kann. Nun, jetzt könnte ich natürlich auch sagen, dass das folgende falsch ist: EAF schrieb: > Methoden hängen nicht einfach so im kontextfreien Raum rum, sondern sind > an/in einer Struktur/Klasse gebunden. > Sie bekommen einen versteckten this Parameter übergeben. Nicht jede Elementfunktion bekommt den Zeiger auf das Objekt: nur non-static Elementfunktionen, was man im Java-Speech dann Klassenmethoden nennt. Und dies ist dann ebenso fragwürdig: EAF schrieb: > Bis auf: > Mit C++ brauchts eigentlich kaum noch Funktionen. > Da spielt die Musik in Namensräumen, und dort eher mit Methoden und > Operatoren
Hallo, genauso kenne ich dich. Das wollte ich hören. :-) Also mal wieder das übliche Problem mit Zitieren & Antworten, der eine versteht es so der andere wiederum anders und schon hat man Kuttelmuttel. Sprich Forumsalltag. Ich wußte tief im Inneren das du Elementfunktion und Funktion trennen kannst. Wünsche dir und allen schönes Wochenende. Ende gut alles gut.
Veit D. schrieb: > Ich wußte tief im Inneren das du Elementfunktion und Funktion trennen > kannst. Danke für das Vertrauen ;-) > Wünsche dir und allen schönes Wochenende. Ende gut alles gut. dito
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.