Forum: Mikrocontroller und Digitale Elektronik C-Sprachen allgemein: Klammern oder keine Klammern, wann, wie, warum?


von Wil (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

konkret geht es hier um Arduino, das lerne ich gerade, dabei ist mir ein 
riesen Fragezeichen gewachsen, welches ich selbst nicht weg machen kann. 
Ich sehe sehr viele Codes/Sketches, in denen bei u.A. "If"-Abfragen 
keine "{}"-Klammern gesetzt werden, die einzige Logik, die ich dabei 
gesehen habe, ist, dass es dann in einer Zeile geschrieben steht und 
diese mit einem Semikolon ";" abgeschlossen wird, als ich mich über 
"int, byte, uint, void..." informiert habe, habe ich gesehen, dass sie 
ebenso mit und ohne Klammern genutzt werden, die ersteren meistens ohne. 
Jetzt habe ich einen Sketch gefunden, in dem das aber nicht alles in 
einer Zeile steht, aber jede Zeile wie üblich mit ";" abgeschlossen ist. 
Von der Logik her gehört das aber alles zusammen. Kann den Code in der 
mobilen Version leider nicht copy&pasten, daher hänge ich mal einen 
Screenshot dran und hier der Link dazu:
http://www.arduinoforum.de/arduino-Thread-Menü-u-Submenü-von-Ricardo-Durchlaufproblem

Ich bastele gerade an einem Code und er wird sehr lang wegen den 
eigentlich kurzen Abfragen, also wäre es nur ordnungshalber schon sehr 
vorteilhaft sie ohne Klammern zu nutzen, wie man Codes ordentlich 
gestaltet war das Erste, was ich ergooglet und verinnerlicht habe.

Könnt ihr mich da bitte aufklären?

von Klaus W. (mfgkw)


Lesenswert?

naja, kann letztlich jeder machen wie er will, solange er alleine 
arbeitet...

Ich für meinen Teil schreibe immer Klammern, auch wenn es nur eine 
Anweisung drin ist. Das finde ich lesbarer als ohne.

von Alter Hase (Gast)


Lesenswert?

Hilf dir selbst, so hilft dir Gott!

Netter gesagt: Lerne C richtig, von Grund auf!
Das mit den Klammern verstehst du, wenn du lernst was sie bedeuten.
Das ist aber so, wie wenn du den Unterschied zwischen "a" und "A" wissen 
willst, um deutsch zu verstehen...

Schaue im Internet nach einem C-Tutorial. Wenn du genügend 
Durchhaltevermögen hast, kommst du mal zur Stelle mit dem "; ( {"

von Fritz G. (fritzg)


Lesenswert?

Bei if, for, do...while usw. darf immer nur ein Befehl stehen. Benutzt 
man die Klammern{}, gilt dieser Block als ein Befehl.
Jeder Befehl muss mit einem ; enden, jedoch nicht ein {} Block.
Falls dich das case irritiert, das sind einfach nur Befehle 
hintereinander, die gehören nicht als Block zusammen. In switch wird 
aber in der Regel im Case am Ende ein break geschrieben, weil sonst geht 
es mit den Befehlen im nächsten Case weiter.

Du kannst schreiben:
if (a==b)
   tuwas();

oder

if (a==b) {
  tuwas();
 }

wobei die zweite Form empfehlenswerter ist. In einer vernünftigen 
Programmiersprache ist es dann wieder ganz anders, da ist bei if ein {} 
Block zwingend, dafür kann man () und ; weglassen:

if a==b {
  tuwas()
}

von Jim M. (turboj)


Lesenswert?

Alter Hase schrieb:
> Schaue im Internet nach einem C-Tutorial.

Das ist ein eher schlechter Rat. Such Dir lieber ein gutes C-Buch wie 
den K&R. Diese Sprache versteht man sonst eher nicht.

von Tobias .. (bitfehler)


Lesenswert?

Wil schrieb:
> als ich mich über
> "int, byte, uint, void..." informiert habe, habe ich gesehen, dass sie
> ebenso mit und ohne Klammern genutzt werden, die ersteren meistens ohne.
1
int b = 5;
2
double a = (double)b;
Wenn du damit sowas meinst: Das nennt sich typecast Operator und wird 
zur Typumwandlung benutzt.

von Wil (Gast)


Lesenswert?

Entschuldigung erstmal für die später Rückmeldung, war beim Rehasport.

Danke Fritz, 99%, hab vergessen zu erwähnen welchen Teil ich exakt 
meine, zwischen "while" und "return", weil es ja der Befehl sein soll, 
mit dem man im Menü zurück kommt. Wird da der "return" erst abgerufen, 
wenn im "while" die Bedingung erfüllt wird?

Danke euch vielmals, du, T., sollst natürlich auch einem besonderen Dank 
kriegen, für genaue Bezeichnungen bin ich immer sehr dankbar. An den 
Rest: Danke für eure Bemühungen, aber solche Ratschläge sind total 
sinnlos, jeder hat seine eigene Art zu lernen, bei mir ist die 
Notwendigkeit das Wichtigste nach dem Interesse, d.h. dass ich nichts 
lerne, wenn ich stupide riesige Texte lese, die von Fachleuten, in 
Fachsprache und aus der Sicht von Fachleuten geschrieben sind, ich 
probiere, wenn ich an meine Grenzen stoße, frage ich Leute, die es drauf 
haben, nicht nur fachlich, sondern auch die Sicht von Anfängern kennen 
und es ihnen so klar machen können, z.B. in dem sie die Fachbegriffe 
immer im Zusammenhang mit einem konkreten Fall benutzen.

von Wil (Gast)


Lesenswert?

Tschuldigung Klaus, hab dich vergessen, für solche Tipps bin ich auch 
immer dankbar, finde auch, dass es so deutlicher ist und verschiede 
Weisen mit denselben befehlen innerhalb eines Codes finde ich ebenso 
unschön. Wie ich es mache ist ja nicht die Frage, sondern konkret die, 
die Fritz perfekt beantwortet hat und die in meinem letzten Beitrag.

von Rolf Magnus (Gast)


Lesenswert?

Wil schrieb:
> Danke Fritz, 99%, hab vergessen zu erwähnen welchen Teil ich exakt
> meine, zwischen "while" und "return", weil es ja der Befehl sein soll,
> mit dem man im Menü zurück kommt. Wird da der "return" erst abgerufen,
> wenn im "while" die Bedingung erfüllt wird?

Nein. Was man auf deinem Bild nicht sieht ist das zum while gehörende 
do. Das was zwischen dem do und dem while steht, wird so lange immer 
wieder ausgeführt, wie die Bedingung erfüllt ist. Es passiert im 
Endeffekt also quasi das Gegenteil von dem, was du oben schreibst. Zum 
return kommt es erst, wenn die Bedingung nicht mehr erfüllt ist.

> Danke euch vielmals, du, T., sollst natürlich auch einem besonderen Dank
> kriegen, für genaue Bezeichnungen bin ich immer sehr dankbar. An den
> Rest: Danke für eure Bemühungen, aber solche Ratschläge sind total
> sinnlos,

Das befürchte ich auch. Viele ignorieren die Hinweise so wie du und tun 
sich in der Konsequenz dann unheimlich schwer.

> jeder hat seine eigene Art zu lernen, bei mir ist die Notwendigkeit das
> Wichtigste nach dem Interesse, d.h. dass ich nichts lerne, wenn ich
> stupide riesige Texte lese, die von Fachleuten, in Fachsprache und aus
> der Sicht von Fachleuten geschrieben sind, ich probiere, wenn ich an
> meine Grenzen stoße, frage ich Leute, die es drauf haben, nicht nur
> fachlich, sondern auch die Sicht von Anfängern kennen und es ihnen so
> klar machen können, z.B. in dem sie die Fachbegriffe immer im
> Zusammenhang mit einem konkreten Fall benutzen.

Wenn du so C oder gar C++ lernst, wirst du ewig brauchen und nach Jahren 
noch elementare Fehler machen. Und das sage ich aus eigener Erfahrung, 
denn den Fehler habe ich damals auch gemacht. Man muss ja nicht gleich 
den Stroustrup komplett durchlesen, aber es ist wie beim Autofahren: Da 
muss man auch erstmal die Grundlagen lernen. Wenn man nach dem 
trial-and-error-Prinzip sich einfach ahnunglos reinsetzt und losfährt, 
wird das nix.

von Dirk B. (dirkb2)


Lesenswert?

Wil schrieb:
> Danke für eure Bemühungen, aber solche Ratschläge sind total
> sinnlos, jeder hat seine eigene Art zu lernen, bei mir ist die
> Notwendigkeit das Wichtigste nach dem Interesse, d.h. dass ich nichts
> lerne, wenn ich stupide riesige Texte lese, die von Fachleuten, in
> Fachsprache und aus der Sicht von Fachleuten geschrieben sind, ich
> probiere, wenn ich an meine Grenzen stoße, frage ich Leute, die es drauf
> haben, nicht nur fachlich, sondern auch die Sicht von Anfängern kennen
> und es ihnen so klar machen können, z.B. in dem sie die Fachbegriffe
> immer im Zusammenhang mit einem konkreten Fall benutzen.

Du solltest erst mal das Konzept hinter der Sprache in Erfahrung 
bringen, damit du auch verstehst, was sich die Erfinder dabei gedacht 
haben.

C ist eine einfache Sprache. Das macht sie aber nicht leicht erlernbar.
C ist von Profis für Profis gemacht worden. (Im Grunde haben sie C für 
sich selber geschrieben)

Und schließe nicht von dem Verhalten anderer Sprachen auf das Verhalten 
von C - und umgekehrt.

von U. C. (Gast)


Lesenswert?

Wil schrieb:
> bei mir ist die
> Notwendigkeit das Wichtigste nach dem Interesse, d.h. dass ich nichts
> lerne, wenn ich stupide riesige Texte lese, die von Fachleuten, in
> Fachsprache und aus der Sicht von Fachleuten geschrieben sind, ich
> probiere, wenn ich an meine Grenzen stoße, frage ich Leute, die es drauf
> haben, nicht nur fachlich, sondern auch die Sicht von Anfängern kennen
> und es ihnen so klar machen können, z.B. in dem sie die Fachbegriffe
> immer im Zusammenhang mit einem konkreten Fall benutzen.


Ich halte das auch für die falsche Vorgehensweise!
Und: Solche Vorgehensweisen unterstütze ich nicht.

Mittlerweile habe ich über 50.000 Postings in technischen Foren.
Ich habe gelernt auszusortieren.....
Manchmal nenne ich sowas: "Fass ohne Boden!"

Nein!
Wer die Grundlagen der Sprache verweigert, welche er verwendet, darf 
meines Erachtens nach nicht in seiner Verweigerungshaltung unterstützt 
werden.
Zumindest ist mir meine Lebensenergie zu wertvoll dafür.

Tut mir leid, wenn das etwas hart klingt....

von Wil (Gast)


Lesenswert?

Gutes Beispiel Rolf, Autofahren habe ich gelernt, als ich 7 Jahre jung 
war, indem ich mich einfach auf Papas Schoß setzte und das Lenkrad in 
die Hand nahm. Wie geschrieben, jeder hat seine eigene Art zu lernen und 
der Focus hier im Forum sollte sich auf das Beantworten der Fragen 
konzentrieren, mit Um- und Ausschweiffungen, aber sich nicht auf 
Klugscheissereien beschränken, man kann auch einfach eine Seite zurück 
gehen und die nächste Frage anschauen, vielleicht frag dort ja einer: 
"Ich will Profi im Programmieren werden und brauche dringend einen Rat: 
Wie nutze das Internet und Bücher?"
Visual Basic habe ich z.B. mit Hilfe von Tutorials gelernt, manche Dinge 
komplett ohne Theorie, manches größtenteils aus Büchern, bei Arduino 
sieht es wieder anders aus, wie genau, kann ich jetzt noch nicht sagen, 
im Monent ist es so der beste Weg für mich. Wie du siehst, sind die 
Unterschiede sogar vom zu lernenden Stoff abhängig.

von Sebastian S. (amateur)


Lesenswert?

Es klingt komisch, aber in "C" gibt es - im Grunde genommen - zwei Typen 
von Klammern.
1. Die "normalen" mathematischen Klammern. Bei etwas so simplem wie:
   8 + 5 * 3 - 1 = ??? kann man jede Menge verschiedene - aber
   richtige - Ergebnisse durch das Setzen von Klammern produzieren.
2. Klammern, die durch die "C"-Syntax festgelegt wurden. Ob diese immer
   sinnvoll sind, oder ob es dafür bessere "Plätze" gäbe ist im
   Grunde genommen egal, da sie bei der Sprachfestlegung eingeführt
   wurden. Da gehören vor allen die Parameterklammern dazu, wie bei
   einem Funktionsaufruf oder auch bei einer Abfrage.
   Dein if gehört auch dazu.

Ich handhabe es immer so: "Eine Klammer zu viel schadet nicht". Was 
übrig bleibt schmeißt der Compiler raus.
Also X =   A  +  B;  oder
     X =  (A) + (B); oder
     X =  (A  +  B); oder
     X = ((A) + (B)); kannst Du halten wie Du willst.
Früher gab es mal eine maximale Verschachtelungstiefe - keine Ahnung ob 
es die noch gibt - aber ich bin noch nie darüber gestolpert.

Ich weiß, die Erbsenzähler werden gleich mit eckigen, und geschweiften 
Klammer um sich werfen – ist mir aber egal. Auch das die obige 
Aufzählung alles andere als vollständig ist.

von Wil (Gast)


Lesenswert?

Danke für die Unterstützung Tomas. Ich weiss es nicht mehr genau, aber 
bin ziemlich sicher, dass es hier war, aber, ich nenne es jetzt einfach 
so, in so einem Offtopic-Gepöbel schritt mal ein alter Hase ein und 
schrieb was dazu, was sich aus dieser Art von nicht-antwortenden 
Antworten raus kristalisiert und zwar sowas wie: "Mimimi, ich bin den 
schweren Weg gegangen und zich Bücher gelesen, die mich nicht wesentlich 
weiter brachten, warum sollst du es leicht haben?" Das scheint hier 
wieder der Fall zu sein.
Bisher habe ich sowas auch noch nicht erlebt, nirgends anders und erst 
recht nicht hier, dabei habe ich oft Probleme bei der Fragestellung, 
aber hier habe ich zwei konkrete Fragen gestellt und es kommt sowas 
absolut sinnbefreites, hab wohl einen der schlechteren Abende erwischt.

Ich habe aber nunmal diese Fragen, das heisst ja nicht, dass ich sonst 
nichts verstehe, das meiste kann man auch nachschlagen, aber dazu habe 
ich keine Themen gefunden und jetzt hunderte von Euros für Bücher 
ausgeben, um zwei, für nen Profi, einfache Fragen zu beantworten, 
erscheint mir doch etwas unverhältnismäßig.

Da die erste Frage perfekt beantwortet wurde und die zweite leider in 
der Sinnlosigkeit versunken ist, wiederhole ich diese:

Hab vergessen zu erwähnen welchen Teil ich exakt meine:
Den zwischen "while" und "return", weil es ja der Befehl sein soll, mit 
dem man im Menü zurück kommt. Wird da der "return" erst abgerufen, wenn 
im "while" die Bedingung !erfüllt wird(also nicht, hehe)?

Ich danke euch, egal wie es gemeint ist, ich denke nunmal anders als die 
meisten und lerne auch so, bin dabei sicher kein Unikat, man kann auch 
positiv streiten und muss es auch, es gibt keine Fehler, sondern nur 
Erfahrungswerte, d.h. wenn ich mal aus der Anfängerphase komme und 
feststelle, dass es anders doch besser ist, ok, dann ist es so, dann 
werde ich an euch denken und u.U. nach Empfelungen für Seiten, Videos, 
Bücher etc. fragen, aber im Moment bringt mich das so, wie ihr es 
empfehlt, nicht wesentlich weiter, weil ich sehr viele Dinge aus 
ähnlichen Programmiersprache kenne und schon recht komplexe Dinge 
hinkriege, nur habe ich mir zu den gestellten Fragen noch nie Gedanken 
gemacht, d.h. das ist schon sowas wie "bis zur nächsten Kreuzung 
zurück".
Und dass ich irgendwas verweigere ist total weit hergeholt, schliesslich 
handelt es sich hier um eine Verständnisfrage ;)

von Wil (Gast)


Lesenswert?

Danke Sebastian, super Antwort, sehe ich, nutze ich, leuchtet soforr 
ein. Aber ich bin der, der mit den geschweiften Klammern kommt, darum 
dreht sich der Beitrag :P

von eiffel (Gast)


Lesenswert?

Bei C/C++ ist es immer empfehlenswert grundsätzlich Klammern zu setzen.
Spätestens wenn man in den Funktionsblock etwas neues hinzufügen 
will/muß hat man schnell mal eine Klammer weniger und dann sucht man 
sich den Wolf bis man sieht wo's klemmt.
Bei anderen Sprachen gibt es z.B.:
1
begin
2
  tuwas
3
end
Ohne begin und end tut sich da nix.
Der Terminator ist da wieder so eine Sache, da gibt es entweder ; oder 
man darf nur einen Befehl pro Zeile mit einem Space als Einrückung usf.
Das hängt an der Syntax der jeweiligen Sprache.
Der Tipp mit dem Buch ist schon das passende, gibt es auch als ebook zum 
download, suche mal danach.
Wenn Du schon mit Arduino arbeitest solltest Du besser gleich mit OO und 
C++ anfangen, dann mußt Du später nicht umdenken und hast viele 
Vorteile, wie Vererbung, Exceptions usw.

von Wil (Gast)


Lesenswert?

Danke eiffel, ich habe ja schon einiges gelesen, gibt man bei google 
z.B. "arduino geschweifte Klammern" ein, findet man bereits auf der 
ersten Seite drei PDF's, ich habe zich solcher PDF's auf dem Handy und 
alle gelesen, aber diese Frage wurde weder dadurch, noch sonstige 
Suchergebnisse beantwortet, daher habe ich sie hier gestellt.

Also: Was und wie passiert in dem erwähnten Bereich? der return steht ja 
vor der schließenden Klammer der Funktion, dass müsste ja heissen, dass 
die Funktion dort automatisch endet und vorher sogar das Dispaly 
gesäubert wird, dass müsste dann ja heissen, dass das Menü nur kurz 
angezeigt wird, aber da ist ja das "while" zwischen, welches auf eine 
Aktion eines Buttons wartet, meiner Logik nach muss es also davon 
abhängig sein, schliesslich ist es der "Zurück"-Button, auf den dort 
gewarter wird, aber das steht alles unter einander und ist nicht 
eingeklammert. Das ist genau das, was für mich unverständlich ist.

von Wil (Gast)


Lesenswert?

Achso, nutzt bitte den Link, ich kann wie erwähnt den Text auf der 
verlinkten Seite nicht kopieren.

von Hannäs (Gast)


Lesenswert?

C Grundregel: Space, Tab und Newline sind gegenseitig austauschbar. 
Insbesondere hat newline keine besondere Bedeutung.

Woher soll ein C-Compiler dann wissen, auf wie viele Statements sich 
z.B. ein if bezieht?

In C ist definiert: auf immer nur genau ein Statement. Da man aber oft 
an so einer Stelle mehrere Statements braucht, haben Programiersprachen 
ein Block-Konzept.

In C: Eine Menge von Statements zwischen { und }. Oder z.B. in Pascal 
zwischen begin und end.

Also folgt z.B. nach if (...) gerne { statement1; statement2; ...;}

Dieses Blockkonzept ist aber viel weitreichender und der Kern zum 
Verständnis der syntaktischen Struktur von C, aber auch von Dingen wie 
z.B. Kapselung.

Tja, sicher kann man mit Lernen nach Bedarf sehr weit kommen, aber nach 
langen Jahren kommt der Moment, wo man schimpft "warum hat man mir das 
nicht früher gesagt?"

Und die Antwort ist ganz einfach: Weil man so lange braucht, bis man 
versteht, daß es das ist, was einem viel früher schon hätte helfen 
können. Bis dahin meint man es nicht zu brauchen

von Markus (Gast)


Lesenswert?

Wil schrieb:
> jeder hat seine eigene Art zu lernen, bei mir ist die
> Notwendigkeit das Wichtigste nach dem Interesse, d.h. dass ich nichts
> lerne, wenn ich stupide riesige Texte lese, die von Fachleuten, in
> Fachsprache und aus der Sicht von Fachleuten geschrieben sind, ich
> probiere, wenn ich an meine Grenzen stoße, frage ich Leute, die es drauf
> haben, nicht nur fachlich, sondern auch die Sicht von Anfängern kennen
> und es ihnen so klar machen können, z.B. in dem sie die Fachbegriffe
> immer im Zusammenhang mit einem konkreten Fall benutzen.

So lernt der Mensch in seiner Kindheit seine Muttersprache. Du möchtest 
also Jahre brauchen, bis Du C halbwegs vernünftig kannst?
Glaub' ich nicht.

von Hannäs (Gast)


Lesenswert?

Solange mpress2 nicht mainbutt4 ist, wird der Bildscgirm nicht gelöscht, 
da es beim von Dir unterschlagenen do{ weitergeht.

return unmittelbar am Ende der Funktion ist natürlich redundant.

von Rolf Magnus (Gast)


Lesenswert?

Wil schrieb:
> Danke für die Unterstützung Tomas. Ich weiss es nicht mehr genau, aber
> bin ziemlich sicher, dass es hier war, aber, ich nenne es jetzt einfach
> so, in so einem Offtopic-Gepöbel schritt mal ein alter Hase ein und
> schrieb was dazu, was sich aus dieser Art von nicht-antwortenden
> Antworten raus kristalisiert und zwar sowas wie: "Mimimi, ich bin den
> schweren Weg gegangen und zich Bücher gelesen, die mich nicht wesentlich
> weiter brachten, warum sollst du es leicht haben?" Das scheint hier
> wieder der Fall zu sein.

Ich schreibe hier exakt das Gegenteil: Ich bin anfangs - so wie du - den 
schweren Weg gegangen, es ohne ein Buch zu machen. Aus der Erfahrung 
heraus versuche ich, dich davon zu überzeugen, es anders zu machen, 
damit du es leichter hast als ich damals. Und nein, man muss nicht "zich 
Bücher lesen", das ist völliger Quatsch.

> Bisher habe ich sowas auch noch nicht erlebt, nirgends anders und erst
> recht nicht hier, dabei habe ich oft Probleme bei der Fragestellung,
> aber hier habe ich zwei konkrete Fragen gestellt und es kommt sowas
> absolut sinnbefreites, hab wohl einen der schlechteren Abende erwischt.

Deine Frage ist absolutes Grundlagenwissen! Das wird in jedem 
C-Einsteigerbuch behandelt. Findest du es nicht etwas dreist, von 
anderen zu verlangen, dieses bereits Tausende von malen 
niegergeschriebene Wissen hier extra für dich nochmal neu 
hinzuschreiben?
Nein, man lernt die Sprache nicht, indem man ein Buch von vorne bis 
hinten durchliest und fertig, auch nicht, indem man 10 Stück liest, aber 
man lernt sie auch nicht, indem man wegen jedem Kleinkram nochmal extra 
jemanden fragt. So ist es für einen selber und für andere einfach nur 
viel mühsamer und nerviger. Wirklich verstehen tut man's damit auch 
nicht, weil man die Zusammenhänge nicht kennt. Man kennt hier ein Detail 
und da eins, aber wie die zusammenspielen und warum, das versteht man 
nicht. Auch das sage ich aus meiner Erfahrung heraus.

> Ich habe aber nunmal diese Fragen, das heisst ja nicht, dass ich sonst
> nichts verstehe, das meiste kann man auch nachschlagen, aber dazu habe
> ich keine Themen gefunden und jetzt hunderte von Euros für Bücher
> ausgeben, um zwei, für nen Profi, einfache Fragen zu beantworten,
> erscheint mir doch etwas unverhältnismäßig.

Und morgen kommst du wieder mit zwei neuen Fragen, und übermorgen 
wieder, u.s.w. ...
Und wo hast du eigentlich diesen Unfug her, man müsse "hunderte von 
Euros für Bücher ausgeben", um deine Grundlagenfragen zu beantworten? 
Ich brauch ja auch nicht gleich eine Bücherreihe über höhere Mathematik, 
um die Grundrechenarten zu lernen. Ein einzelnes Grundschul-Mathebuch 
reicht.

> Da die erste Frage perfekt beantwortet wurde und die zweite leider in
> der Sinnlosigkeit versunken ist, wiederhole ich diese:
>
> Hab vergessen zu erwähnen welchen Teil ich exakt meine:
> Den zwischen "while" und "return", weil es ja der Befehl sein soll, mit
> dem man im Menü zurück kommt. Wird da der "return" erst abgerufen, wenn
> im "while" die Bedingung !erfüllt wird(also nicht, hehe)?

Was fehlt dir denn an meiner Antwort auf diese Frage?

> Bücher etc. fragen, aber im Moment bringt mich das so, wie ihr es
> empfehlt, nicht wesentlich weiter,

Ich habe nicht den Eindruck, dass du das überhaupt versucht hast. Und 
mit dem Weg, wie du ihn aktuell einschlägst, kommst du offenbar auch 
nicht wirklich schnell voran.

von Markus (Gast)


Lesenswert?

Nochwas: der TO verweigert sich, eigene Erfahrungen zu sammeln, sondern 
will die Erfahrung anderer vorgekaut bekommen. Warum wird ein solches 
Schmarotzertum unterstützt?

von Wil (Gast)


Lesenswert?

Aaaahhhh, ja, jetzt, das ist es Hannäs. Die Funktion hält, bis das 
Während eintritt und geht dann erst weiter, so gesehen macht das return 
ja doch nen Sinn, eben um dann aus der Funktion zu gehen, aber das 
entscheidende ist das Halten bis... Dachte dass vor und nach dem while 
Klammern müssen, aber das hält ja dort. Jetzt hab ichs, oder? Erst 
dachte ich da ist was falsch, aber da in dem Forum sich alle bedankten 
und schrieben, dass es geht...

Danke vielmals.

@Markus Ich brauche keine Jahre, um etwas zu lernen, schließe nie von 
dich auf andere, ich bin Ende 20, lebe erst seit 6 Jahren in Deutschland 
und habe die deutsche Sprache in unter einem Jahr gelernt, akzentfrei.
Deine Niveaulosigkeiten kannst du an Toilettentüren hinterlassen, mir 
gegenüber spar sie dir. Willst du fürs Helfen und dafür, dass du dein 
Wissen mit anderen teilst bezahlt werden? Dann bist du hier falsch, 
ansonsten spar dir solche Widerlichkeiten wie "Schmarotzertum", wie 
geschrieben, wenn du nichts zum Thema beizutragen hast, klick auf den 
"Zurück"-Button, wenn das hier für dich die einzige Möglichkeit ist dich 
mitzuteilen, dann ist es ein anderes Problem, was du bei einer anderen 
Möglichkeit schreiben solltest. Genau auf dich passt die Anmerkung des 
"alten Hasen" perfekt zu.

von eiffel (Gast)


Lesenswert?

Wil schrieb:
> Danke eiffel, ich habe ja schon einiges gelesen, gibt man bei google
> z.B. "arduino geschweifte Klammern" ein, findet man bereits auf der
> ersten Seite drei PDF's, ich habe zich solcher PDF's auf dem Handy und
> alle gelesen, aber diese Frage wurde weder dadurch, noch sonstige
> Suchergebnisse beantwortet, daher habe ich sie hier gestellt.
>
> Also: Was und wie passiert in dem erwähnten Bereich? der return steht ja
> vor der schließenden Klammer der Funktion, dass müsste ja heissen, dass
> die Funktion dort automatisch endet

Das return dient dazu aus der Funktion/Routine rauszuspringen und dann 
dort weiter zu machen wo sie aufgerufen wurde.
Das hat NICHTS mit den Blockzeichen zu tun die definieren das zwischen { 
und } genau ein Codeblock sitzt der entweder als Funktion definiert ist 
oder mit anderen Steuerkonstukten wie if, switch usw.



> und vorher sogar das Dispaly
> gesäubert wird, dass müsste dann ja heissen, dass das Menü nur kurz
> angezeigt wird, aber da ist ja das "while" zwischen, welches auf eine
> Aktion eines Buttons wartet, meiner Logik nach muss es also davon
> abhängig sein, schliesslich ist es der "Zurück"-Button, auf den dort
> gewarter wird, aber das steht alles unter einander und ist nicht
> eingeklammert. Das ist genau das, was für mich unverständlich ist.

Dann solltest Du Dir mal den OO Code der Arduino Bibliothek ansehen und 
ein C++ Buch lesen, z.B. den Stroustrup der C++ ja realisiert hat.
In einem Objekt das z.B. das Display ansteuert wird es sicherlich einen 
Konstruktor geben der erstmal alles initialisiert und dann Funktionen 
die das Display bedienen.
Solange das Display-Objekt nicht beendet wird läuft das weiter.
Wenn also das Display-Objekt außerhalb Deiner eigenen Funktion/Objekt 
deklariert ist wird es weiter vorhanden sein und laufen.
Hast Du das lokal in Deiner Funktion wird es wie alle lokalen Variablen 
in C freigegeben wenn die Funktion terminiert.
Schau Dir erstmal die Grundlagen für höhere Programmiersprachen an und 
beschäftige Dich mit OO und C++.
Wenn Du die Grundlagen verstanden hast wird es einfacher Dinge zu 
verstehen.
Z.B. kann man in C++ Operatoren überladen, d.h. wenn ich ein 
Display-Objekt habe kann ich darin << für die Ausgabe überladen und 
einfach einen String übertragen der wie auf STDOUT ausgegeben wird.
Umgekehrt kann Dein Taster-Objekt >> überladen und wie STDIN benutzt 
werden.
Das ist einer der Vorteile von C++, es läßt sich mit entsprechenden 
Objekten intuitiv identisch verwenden.

von Markus (Gast)


Lesenswert?

Wil schrieb:
> Die Funktion hält, bis das Während eintritt und geht dann erst weiter
Nö. "while" bedeutet nicht immer "während". Überleg' doch mal, was 
"while" in diesem Kontext (C) bedeutet und wie lange sich die 
while-Schleife drehen soll. In einem Buch von K&R bei Amazon gebraucht 
ab EUR 8,66 steht das, auf 1000 und mehr Webseiten auch. Aber nichtmal 
dort hast Du recherchiert. Du wilst, daß es Dir andere vorkauen.

> @Markus Ich brauche keine Jahre, um etwas zu lernen, schließe nie von
> dich auf andere
Hab ich nirgends (der Mensch in seiner Kindheit), aber Du machst das 
gerade.

> Deine Niveaulosigkeiten kannst du an Toilettentüren hinterlassen
Dito.

Du versucht, etwas Dir völlig unverständliches zu verstehen und gehst 
dabei wie ein Kleinkind vor, anstatt Deinen Verstand einzusetzen und die 
Sache systematisch anzugehen. Oder Du bist einfach nur faul.
Programmiersprachen sind formale Sprachen. Die einen folgen sehr 
umfangreichen Formalismen (Cobol), andere sehr wenigen. C ist eine 
solche Sprache, die sehr wenigen Formalismen gehorcht. Die grundlegenden 
einmal zu verinnerlichen, dauert nicht lange, würde Dir aber im 
Weiterkommen erheblich helfen, anstatt wie hier im Nebel rumzustochern. 
Du willst doch auch mal auf das große Ganze schauen können, oder?

von Hannäs (Gast)


Lesenswert?

"While" übersetzt man hier besser mit "Solange"

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Wil schrieb:
> @Markus Ich brauche keine Jahre, um etwas zu lernen, schließe nie von
> dich auf andere, ich bin Ende 20, lebe erst seit 6 Jahren in Deutschland
> und habe die deutsche Sprache in unter einem Jahr gelernt, akzentfrei.

 LOL.
 Habe in Deutschland studiert, das mit unter einem Jahr und akzentfrei
 glaube ich dir nicht.
 Wenn du die deutsche Sprache so schnell kapierst wie C (oder Arduino)
 dann wirst du noch etwa 50 Jahre brauchen, um akzentfrei zu sprechen.

: Bearbeitet durch User
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.