Forum: Compiler & IDEs C: Kommas in Codezeile?


von E. Müller (Gast)


Lesenswert?

Hallo!

Hab folgenden Code gefunden und verstehe nicht, was die Kommas bewirken:
1
  for (p = str, q = p + (n - 1); p < q; ++p, --q)
2
    {
3
      c = *p, *p = *q, *q = c;
4
    }

Kann mir da bitte jemand helfen?

Danke!

Gruß
E. Müller

von ausfüllen (Gast)


Lesenswert?


von Oliver (Gast)


Lesenswert?

Was sagt denn dein C-Buch dazu? Wenn du keins hast, wäre es spätesttesn 
jetzt angebracht, sich eins zu besorgen.

Solltest du allerdings schon herausgefunden haben, daß die 
Programmiersprache "C" ist, und das "," ein Operator mit dem Namen 
"Komma" ist, dann fütter doch mal die Suchmachinen deines Vertrauens mit 
den Begriffen "C Komma Operator".

Du wirst dich wundern, was man im Internet alles findet. Und das get in 
der Regel viel schneller, als sich eine Frage in einem Forum formulieren 
lässt.

Oliver

von E. Müller (Gast)


Lesenswert?

Wird die Codezeile
1
c = *p, *p = *q, *q = c;
 damit atomar?

von E. Müller (Gast)


Lesenswert?

Bzw. die Zeile ist doch das Gleiche, wie:
1
c = *p;
2
*p = *q;
3
*q = c;
Warum schreibt man das dann mit dem Komma-Operator?

von Dr. Sommer (Gast)


Lesenswert?

E. Müller schrieb:
> Warum schreibt man das dann mit dem Komma-Operator?
Weils kürzer ist und so in eine for-Schleife passt.

von E. Müller (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Weils kürzer ist und so in eine for-Schleife passt.

Warum sollen die drei Zeilen nicht in eine Schleife passen!?

von Stefan E. (sternst)


Lesenswert?

E. Müller schrieb:
> Warum schreibt man das dann mit dem Komma-Operator?

Das hat hier keinen Grund, außer vielleicht den, dass der Autor das 
irgendwie "schöner" fand.

von Promeus (Gast)


Lesenswert?

Weil es Geschmackssache ist.

Es gibt viele Möglichkeiten wie man Code schreibt, das ist in der Regel 
dem Programmierer überlassen ausser er hat sich an "Coding Guidelines" 
zu halten.
1
   a == 2 ? ret = false : ret = true;

ist dasselbe wie:
1
   if (a == 2) ret = false;
2
   else ret = true;

oder
1
   if (a == 2) {
2
      ret = false;
3
   } else {
4
      ret = true;
5
   }

Kann man schreiben wie man will ...

Grüsse,
R.

von Thosch (Gast)


Lesenswert?

Promeus schrieb:
> a == 2 ? ret = false : ret = true;

hmm, ich vermute mal, Du meintest:
1
ret = (a == 2)? false : true;


davon abgesehen würde ich das so schreiben:
1
ret = !(a == 2);

oder so:
1
ret = (a != 2);

Gruß,
Thosch

von Promeus (Gast)


Lesenswert?

Nö, meinte ich nicht. Man kann aber auch Deine Schreibweise verwenden.

Es war nur ein bildliches Beispiel. ;-) Also, reite da mal nicht rum. 
Codieren würde ich das so auch nicht ;-)

Grüsse,
R.

von DirkB (Gast)


Lesenswert?

E. Müller schrieb:
> Wird die Codezeilec = *p, *p = *q, *q = c; damit atomar?

Nein.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

DirkB schrieb:
> E. Müller schrieb:
>> Wird die Codezeilec = *p, *p = *q, *q = c; damit atomar?
> Nein.

Kommt drauf an, was man unter "atomar" versteht. Auf jeden Fall kann man 
bei Verwendung des Kommas zwischen den Befehlen die geschweiften 
Klammern davor und dahinter weglassen, d.h. bei

  for (...) a, b, c;

sind die Statements a, b, c allesamt in der for-Schleife.

von Konrad S. (maybee)


Lesenswert?

Frank M. schrieb:
> sind die Statements a, b, c allesamt in der for-Schleife.

Das "a, b, c" ist ein Statement.

von Klaus W. (mfgkw)


Lesenswert?

Das gesamte for auch :-)

von CGast (Gast)


Lesenswert?

Frank M. schrieb:
> Kommt drauf an, was man unter "atomar" versteht.

Naja, i.d.R. versteht man unter "atomar", dass der Vorgang nicht durch 
andere Vorgänge unterbrochen bzw. beeinflusst werden kann. Und das ist 
bei diesem Statement nicht der Fall. Denn ein Interupt oder Ähnliches 
kann hier problemlos zuschlagen.

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.