Forum: PC-Programmierung Comma Operator in C


von Buttermilch (Gast)


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?

: Gesperrt durch Moderator
von Stefan F. (Gast)


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.

von Jim M. (turboj)


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.

von Peter D. (peda)


Lesenswert?

Buttermilch schrieb:
> 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.

Wie sollen wir in Deinen Kopf schauen können?
Wenn Du Fragen zu einem Beitrag hast, dann mußt Du ihn gefälligst auch 
verlinken.

von Rolf M. (rmagnus)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich mag den Operator nicht.
>
> Alleine schon deswegen, weil er sich in der for() Schleife ganz anders
> verhält.

Inwiefern?

von Stefan F. (Gast)


Lesenswert?

Buttermilch schrieb:
> wie das mit der besseren Übertragung und höherer Clock geht.

Was auch immer du damit meinst, jedenfalls nicht mit dem Comma Operator.

von Buttermilch (Gast)


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?

von Buttermilch (Gast)


Lesenswert?

Peter D. schrieb:
> dann mußt Du ihn gefälligst auch
> verlinken.

Sorry, wie das geht muss ich mal schauen!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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).

von Stefan F. (Gast)


Lesenswert?

Buttermilch schrieb:
> Ich kapier dazu nur Bahnhof? Aber wenn da was geht, wie denn?

Ich auch. Worum geht es hier?

von Rolf M. (rmagnus)


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!".

von Buttermilch (Gast)


Lesenswert?

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"

von Stefan F. (Gast)


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.

von Veit D. (devil-elec)


Lesenswert?

Ihr braucht nicht weiter antworten. Es ist offentlich das
1
Buttermilch == C&P_Hunter == Snafu
ist. Ernsthafte Fragen und Nachfragen sehen anders aus.

von (prx) A. K. (prx)


Lesenswert?

Buttermilch schrieb:
> ich lass gerade in einem wilden Thread hier was von Verkettungsoperator
> in C und dass das Mist wäre und ganz falsch.

In der Frühzeit von C konnte er in komplexeren Makros sehr nützlich sei. 
Heute macht man das besser in Inline-Funktionen und Templates (C++). Der 
Rest ist eine Sache des persönlichen Geschmacks.

von Kinderkacke Entsorger (Gast)


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).

von Buttermilch (Gast)


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.

von Stefan F. (Gast)


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 :-)

von Roland F. (rhf)


Lesenswert?

Hallo,
Buttermilch schrieb:
> 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.

Wenn ich es richtig verstehe, dann ist doch

(1) if(a=b,a)...

äquivalent zu

(2) a=b; if(a)

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

rhf

von sg1f3 (Gast)


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 ...?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Veit D. schrieb:
> Ihr braucht nicht weiter antworten. Es ist offentlich das
>
1
> Buttermilch == C&P_Hunter == Snafu
2
>
> ist. Ernsthafte Fragen und Nachfragen sehen anders aus.

Yep, und sg1f3 ist er jetzt auch noch.

Das genügt.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.