Hallo, j = (i<leng-1) ? 0 : 1; Ich kenne zwar die Zuweisung "j=(i<leng-1)" aber wie muss ich "? 0 : 1 " verstehen. Heist das, das j nur 0 oder 1 werden kann? Danke an die C-Profis.. Bernd
ist äquivalent zu:
1 | if(i<leng-1) { |
2 | j = 0; |
3 | }
|
4 | else { |
5 | j = 1; |
6 | }
|
Sollte aber in jedem C-Lehrbuch drin sein :-/
Halloe. Das ganz ist eine verkürzte Schreibweise für eine IF THEN ELSE Bedingung. Vor dem Fragezeichen steht die Bedingung. Zwischen Fragezeichen und Doppelpunkt steht der Wert der J zugewiesen werden soll, wenn diese Bedingung "WAHR" ist. Nach dem Doppelpunkt steht der Wert, der J zugewiesen werden soll wenn die Bedingung "UNWAHR" ist. Der Vorteil ist, das die Variable J damit nicht mehr unbedingt eine Zahl sein muss. Man könnte damit genau so gut auch Strings zuweisen, was in "j=(i<leng-1)" nicht gehen würde. Freundliche Grüße Frank
Klaus Wachtler schrieb: > Frank Zoll schrieb: >> Das ganz ist eine verkürzte Schreibweise > > geht aber noch deutlich kürzer :-) Hm... j = !(i<leng-1); ???
a no nym schrieb: > Klaus Wachtler schrieb: >> Frank Zoll schrieb: >>> Das ganz ist eine verkürzte Schreibweise >> >> geht aber noch deutlich kürzer :-) > > Hm... j = !(i<leng-1); ??? kann man machen Es geht auch j = i > leng;
Stefan Ernst schrieb: > a no nym schrieb: >> Ach verflixt, wieder war dieser Karl-Heinz besser. :-) > > Aber leider falsch. ;-) Magst du das näher ausführen (Ich hab extra 20 Sekunden überlegt, ob es jetzt -1 heißen muss oder nicht. Gut, den Fall an den Wertüberläufen hab ich jetzzt nicht näher untersucht aber ansonsten müsste das stimmen) Edit: Oh, und ich bin von Ganzzahldatentypen ausgegangen. Ich denke bei Variablennamen i, j und len ist das akzeptabel.
Karl Heinz Buchegger schrieb: > Stefan Ernst schrieb: >> a no nym schrieb: >>> Ach verflixt, wieder war dieser Karl-Heinz besser. :-) >> >> Aber leider falsch. ;-) > > Magst du das näher ausführen > (Ich hab extra 20 Sekunden überlegt, ob es jetzt -1 heißen muss oder > nicht. Gut, den Fall an den Wertüberläufen hab ich jetzzt nicht näher > untersucht aber ansonsten müsste das stimmen) Setzen wir doch einfach mal für leng und i das gleiche ein, z.B. 10: !(10<9) vs 10>10
Stefan Ernst schrieb: > Karl Heinz Buchegger schrieb: >> Stefan Ernst schrieb: >>> a no nym schrieb: >>>> Ach verflixt, wieder war dieser Karl-Heinz besser. :-) >>> >>> Aber leider falsch. ;-) >> >> Magst du das näher ausführen >> (Ich hab extra 20 Sekunden überlegt, ob es jetzt -1 heißen muss oder >> nicht. Gut, den Fall an den Wertüberläufen hab ich jetzzt nicht näher >> untersucht aber ansonsten müsste das stimmen) > > Setzen wir doch einfach mal für leng und i das gleiche ein, z.B. 10: > !(10<9) vs 10>10 Verdammt. Ich such mir schon ein Eckchen zum schämen :-) (und ich war mir so sicher, dass das -1 gegen das >= "gekürzt" werden kann, grummel grummel)
Hallo, alles klar !! Diese verkürzten Schreibweisen sind ja das a und o bei C. Ich kannte diese Schreibweise mit dem ? Zeichen nicht. Jetzt ja.. Danke allen Antwortern.. Schoenes WE Bernd
Karl Heinz Buchegger schrieb: > (und ich war mir so sicher, dass das -1 gegen das >= "gekürzt" werden > kann, grummel grummel) Wäre gegangen, wenn es +1 gewesen wäre. Hier würde durch das "Kürzen vom =" ein -2 entstehen: !(i<leng-1) -> i>=leng-1 -> i>leng-2 Aber 100%ig gleichwertig wäre es mit "Kürzen" nie. Es gäbe immer einen Wert für leng, bei dem das Verhalten unterschiedlich wäre (wegen Über-/Unterlauf).
Bernd Bömer schrieb: > Hallo, > alles klar !! > Diese verkürzten Schreibweisen sind ja das a und o bei C. Eigentlich sind sie es nicht. Was am Ende zählt ist, was der Compiler daraus macht. Deswegen schreiben intelligente Programmierer den Code so, dass man ihn hinterher noch verstehen kann. Und nicht etwa sowas:
1 | #define CHECKTHISOUT(x) (x==0?0:((x==1)?3:((x==2)?5:13))) |
Ein reales Beispiel aus unserem Sourcecode aus der Arbeit. Kollegen, die sowas schreiben, gehört eigentlich von Rechts wegen eins in die Fresse. ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.