Entwickler-Ecke
Off Topic - Zu C: if (a = b)... Frage
GuaAck - So 08.03.15 23:46
Titel: Zu C: if (a = b)... Frage
Liebe Leute,
als "Pascaler" hatte ich doch kürzlich eine Kleinigkeit mit C zu machen und hatte bei einer If-Abfrage auf Gleichheit "=" statt "==" gesschrieben. Der Compiler hat keine Fehlermeldung gegeben, also ist die Syntax ok, aber es war ja nicht das, was ich wollte. Mein Fehler war schnell gefunden.
Meine Frage: Wenn ich if (a=b) schreibe, wann ist(a=b) TRUE, wann FALSE? Wo nützt so eine Konstruktion?
Der Nutzen, das würde ich gerne wissen, wann ist if (a=b) nützlich?
Gruß
GuaAck
P.S.: An Google habe ich anscheinend immer die falsche Frage gestellt, jedenfalls habe ich nichts gefunden.
C# - Mo 09.03.15 00:06
Hallo,
der erste Link wenn man bei Google "C Zuweisung in if Bedingung" eingibt, führt zu
Fallstricke bei der C-Programmierung [
http://rn-wissen.de/wiki/index.php/Fallstricke_bei_der_C-Programmierung].
Was bei
if (a = b) in C passiert ist folgendes:
Die Variable a nimmt den Wert aus b an. Also wird letztendlich der Wert b geprüft. Da in C alles
true ist, was nicht 0 ist, kann je nachdem der if Block betreten werden oder halt nicht.
Nach dieser if Anweisung hat a auf jeden Fall den Wert b. Je nachdem ob jetzt b==0 war oder b!=0 wurde der if-Block entweder übersprungen (b==0) oder ausgeführt (b!=0).
Dieses Verfahren hat meiner Ansicht nach überhaupt keinen vorteilhaften Nutzen. Das stiftet höchstens ein haufen Verwirrung.
jaenicke - Mo 09.03.15 08:39
Es ist eine der abkürzenden Schreibweisen, die den Quelltext kurz aber unleserlicher machen. C ist für Schreibfaule gar nicht schlecht, anders als Delphi. ;-)
Ich bin z.B. auch froh, dass es keinen Konditionaloperator in Delphi gibt. Auch der macht den Quelltext kürzer, aber unübersichtlicher.
FinnO - Mo 09.03.15 22:34
Moin,
jaenicke hat folgendes geschrieben : |
Ich bin z.B. auch froh, dass es keinen Konditionaloperator in Delphi gibt. Auch der macht den Quelltext kürzer, aber unübersichtlicher. |
Das halte ich für zu pauschalisierend. Gerade dadurch, dass der ternäre Operator einen Rückgabewert hat, lässt sich sehr lesbarer Code erzeugen:
C#-Quelltext
1:
| float clippedAmplitude = signal < 5.0 ? signal : 5.0; |
Ist meiner Meinung nach gerade im Gesamtkontext deutlich einfacher zu lesen als
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| float clippedAmplitude; if(signal < 5.0) { clippedAmplitude = signal; } else { clippedAmplitude = 5.0; } |
Gruß
jfheins - Mo 09.03.15 22:47
Zu der Abkürzung: Man kann damit solche Sachen schreiben:
C#-Quelltext
1:
| while (item = GetNextItem()) |
Wobei GetNextItem entweder ein gültiges Objekte oder einen Nullpointer zurückgibt. Innerhalb der while-Schleife kann man also auf item zugreifen, und die Schleife wird automatisch verlassen, falls ein Nullpointer kommt (weil kein nächstes Element mehr da ist)
Da gibt es noch ein paar Sachen, die damit zu Einzeilern werden, auch mal mit einem Semikolon hinter dem while (==> leerer Schleifenkörper) zum Beispiel bei der Längenbestimmung eines null-terminierten Strings:
C#-Quelltext
1: 2:
| int len = -1; while(str[++len]); |
Vielleicht nicht ultimativ lesbar, aber kurz :twisted:
Ralf Jansen - Mo 09.03.15 22:48
Zitat: |
Das halte ich für zu pauschalisierend. Gerade dadurch, dass der ternäre Operator einen Rückgabewert hat, lässt sich sehr lesbarer Code erzeugen:
C#-Quelltext 1:
| float clippedAmplitude = signal < 5.0 ? signal : 5.0; | |
Nein. Das hier ist lesbar :P
C#-Quelltext
1:
| float clippedAmplitude = Math.Min(signal, 5.0f); |
Aber mal im ernst Lesbarkeit ist einfach meist nur ein anderes Wort für Gewohnheit. Wenn ich es gewöhnt bin im Delphi Stil zu programmieren ist Code im Delphi Stil am lesbarsten. Das gilt im gleichen Maß für fast jede andere Sprache (Ausnahmen bestätigen die Regel). Wir sollten immer Vorsichtig sein und aufpassen die eigenen Gewohnheiten nicht mit tatsächlicher Qualität zu verwechseln.
mandras - Di 10.03.15 00:43
Grinsel...
gerade den ternären Operator vermisse ich öfters mal in Delphi.
Bin dann aber wenn ich mit PHP zu tun habe immer wieder froh, daß es ihn dort nicht gibt.
Hierzu verweise ich auf das implizite Type-Casting.
Ja, es hat alles seine Vor- und Nachteile.
Was würde in Delphi sprechen gegen:
A:=B:=C:=0
ist aber auch nicht besser als die C-Version.
Die Idee bei C ist eben ein kleines bissel anders als bei Pascal.
mandras - Di 10.03.15 10:10
ich meinte daß es ihn in DELPHI nicht gibt :)
WasWeißDennIch - Di 10.03.15 11:30
Du vermisst ihn, bist aber froh, dass es ihn nicht gibt? :gruebel:
Ralf Jansen - Di 10.03.15 12:20
Trinitäts-Operator :shock: Programmieren hat oft was religöses aber das die PHP Leute gleich mit der der Dreifaltigkeit anrücken ist doch leicht übertrieben :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!