Comma Operator in C

Gast #6300097
Lesenswert?

Hi Leute,
ich lass gerade in einem wilden Thread hier was von Verkettungsoperator 
in C und dass das Mist wäre und ganz falsch.

Also habe ich mal rumgesucht und unter loops hier 
https://en.wikipedia.org/wiki/Comma_operator nachgelesen.

Danach würde ich nicht mehr denken, dass das Mist war. Weil das Ding ist 
klar als Sequenzpunkt definiert.

Auch wären Anweisungen wie if(a=b,a) oder switch(a=b,a) dann nicht 
möglich, doch finde ich sowas in Github Sourcecode.

Wer hat den nun recht hier, die Experten aus dem Forum oder Google oder 
die Glaskugel?

Arduino Fanboy D. schrieb:
> Der hier ohne jede Not verwendete (also überflüssige)
> Ausdrucksverkettungsoperator, machts nur schlimmer/hässlicher.

von MaWin (Gast)
val >>= 1, digitalWrite(dataPin, val & 0x01);
... und ergibt dann ein anderes Ergebnis.


Da der Thread dicht gemacht wurde, wollte ich mal hier noch fragen, ob 
jemand weis, wie das mit der besseren Übertragung und höherer Clock 
geht.

Soll ja ganz wenig Code sein - Dreizeiler und so.

Ich brings nicht zustande, wer kennt sich da aus?
Gast #6300109
Lesenswert?

Ich mag den Operator nicht.

Alleine schon deswegen, weil er sich in der for() Schleife ganz anders 
verhält. Deswegen nutze ich ihn sonst nirgendwo anders.

C enthält jede Menge äußerst hässliche verwirrende Sachen. Die meisten 
davon fallen in die Kategorie "ist halt so". Aber ein paar kann man 
unbenutzt lassen, dann muss man sich auch nicht darüber ärgern.
#6300117
Lesenswert?

Erst ein Rant über den C Komma Operator und dann eine davon orthogonale 
technische Frage, natürlich ohne ausreichend Source Code.

Anders ausgedrückt: So sollte man in einem öffentlichen Forum NICHT 
posten.

Hier sucht niemand nach alten Beiträgen aus ellenlangen Treads 
(letzteres ist eine Vermutung).

Wenn Dir digitalWrite() zu langsam ist - IIRC ein kompletter function 
call - spreche die GPIO Ports halt zu Fuß an.
Gast #6300135
Lesenswert?

Jim M. schrieb:
> Wenn Dir digitalWrite() zu langsam ist - IIRC ein kompletter function
> call - spreche die GPIO Ports halt zu Fuß an.

ok danke, das würde immer gehen.

Da stand dann auch noch von C_P_Hunter

Das Thema wäre gewesen, dass die SW-SPI Transferrate nur besser werden
kann, wenn die SPI-Clk Rate z.B. relativ/dynamisch höher wird.

Wie soll das gehen, wenn wir annehmen, das der IO-Accress optimal von
Super Arduino Fanboy D. implementiert ist?
Offensichtlich nur, wenn wir einige IO-Zugriffe auslassen können.

Wie soll das möglich sein?
Wenn keine Bitzustandsänderung im Datenstrom stattfindet.

Bedeutet, die SPI-Clk Rate ist nicht mehr konstant sondern ändert sich
im Charakter des Datenbitstroms. Um so mehr Daten übertragen werden um
so besser der relative Performancegewinn. Daher besonders nützlich, wenn
wir an ein Interface mit Grafikdisplay denken.


Der Code dazu ist real ein Dreizeiler und setzt ein heute
fast immer anzutreffenes IO-Feature voraus.


Ich kapier dazu nur Bahnhof? Aber wenn da was geht, wie denn?
#6300147
Lesenswert?

Jörg W. schrieb:
> Du klickst mit der rechten Maustaste auf eine Überschrift (am besten die
> des Beitrags) und sagst "Link kopieren". Dann fügst du ihn in deinen
> aktuellen Beitragstext ein (Ctrl-V).

Das steht übrigens auch in dem Block, wo man seine Postings verfasst, 
unter "Formatierung". Jedes Mal, wenn man postet, bekommt man das also 
zu Gesicht. Liest natürlich keiner, obwohl groß und fett drüber steht 
"Wichtige Regeln - erst lesen, dann posten!".
Gast #6300163
Lesenswert?

Rolf M. schrieb:
> Liest natürlich keiner

Das kommt daher, weil wir von den Medien auf Labels wie

> Diese geniale geheime Lösung überrollt Europa!

> Warum alle süchtig auf dieses Forum sind!

> Du musst es selbst probieren, um zu verstehen,
> warum Eliten diese Idee vernichten wollten!

konditioniert werden. Alles weniger aufregende übersieht man, wenn man 
mit der breiten Masse mit schwimmt.
Gast #6300184
Lesenswert?

Buttermilch schrieb:
> Rolf M. schrieb:
>> "Wichtige Regeln - erst lesen, dann posten!".
>
> ok, kapiert
>
> Meine 2. Frage kommt aus den Thread hier und ja meine Überschrift passt
> nicht dazu, und jetzt?
>
> Beitrag "#01 Dark Side of Code C&P Culture"

Genau genommen meinst du wohl diesen Beitrag:
Beitrag "Re: #01 Dark Side of Code C&P Culture"
denn das ist der einzige Post bei dem der Komma-Operator explizit 
erwähnt wird.
Zitat:
1
MaWin schrieb:
2
> digitalWrite(dataPin, val & 0x01), val >>= 1;
3
>
4
> könnte auch
5
>
6
> val >>= 1, digitalWrite(dataPin, val & 0x01);
7

8
Nein, der Komma-Operator stellt einen Sequence-Point dar (s. Abschnitt
9
6.5.17 in ISO/IEC 9899:2017).
Gast #6300189
Lesenswert?

A. K. schrieb:
> Heute macht man das besser in Inline-Funktionen und Templates (C++). Der
> Rest ist eine Sache des persönlichen Geschmacks.

Stefan ⛄ F. schrieb:
> C enthält jede Menge äußerst hässliche verwirrende Sachen. Die meisten
> davon fallen in die Kategorie "ist halt so". Aber ein paar kann man
> unbenutzt lassen, dann muss man sich auch nicht darüber ärgern.


Dann muss ich mir zu den alten C-Kram wohl keinen Kopf mehr machen, C++ 
kann ich nur wenig aber mit Python geht mehr.
Gast #6300199
Lesenswert?

Buttermilch schrieb:
> Dann muss ich mir zu den alten C-Kram wohl keinen Kopf mehr machen, C++
> kann ich nur wenig aber mit Python geht mehr.

C++ hat sehr viele Eigenschaften von C geerbt und beide 
Programmiersprachen sind zumindest im Mikrocontroller Umfeld und auch 
bei Linux noch sehr weit verbreitet - ich wage sogar zu behaupten, dass 
C dort die hauptsächlich verwendete Programmiersprache ist.

Solange das noch so ist, muss man sich wohl doch einen Kopf um C machen. 
Ist halt so :-)
Gast #6300233
Lesenswert?

Roland F. schrieb:
> Welchen Vorteil hat (1) gegenüber (2), b.z.w. was ist die Idee dahinter?

Nur mal so als Info dazu ...

In moderner C-Programmierung von Schellong,
Page 27, steht das hier unter KO-Logik

if (r=0, !a && (r=1, b>6) && (r=2, c))

und dann steht da
"Bei diesen Operatoren wird von links nach rechts gemäß KO-Logik 
verfahren:
Sobald eine Bedingung vor && 0 ist oder sobald eine Bedingung vor || 1 
ist, wird der Rest der &&- bzw. ||-Verknüpfung ignoriert, denn dann 
steht fest, daß die jeweilige Bedingungskette als Ganzes FALSE(0) bzw. 
TRUE(1) ist. !a^!b entspricht einem logischen XOR: ""

Da stehen noch weitere Beispile dazu, aber ich raff das nicht.


Also ich denke so, die Zuweisungen werden dann nur von links nach rechts 
schrittweise ausgeführt, entsprechend den Bedingungen von links nach 
rechts ...?
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.