Hallo Leute,
hab da mal ne Frage:
Suche ich mich gerade dusselig, oder gibts kein elseif in avr C?
1
if(){...}
2
else{...}
is ja klar.
aber gibts denn kein
1
if(){...}
2
elseif{...}
3
else{...}
?
mein compiler (Atmel Studio 6) sagt mir dass es das nicht gibt.
Genausowenig wie elsif, else-if....
würde mich mal interessieren, ob ich nur die synthax falsch schreibe,
oder ob es das nicht gibt und ich ggf auf case-strukturen umsteigen
muss.
gruß sven
Vielleiocht liegt das daran, daß es keine if-Schleife gibt.
http://www.if-schleife.de/http://www.php-faq.de/q-terminologie-if.html
Was nun an elseif so gut sein soll daß man meint es unbedingt zu
brauchen und an else if so unmöglich sein soll daß man es gar niemals
nie schreiben will, verschliesst sich und ebenso.
Timo schrieb:> mit Leerzeichen:> if ()> {}> else if ()> {}
genau bei dem Konstrukt sagt mir das Studio, dass er "else if" nicht
kennt... Was is das fürn mist?
Chris schrieb:> genau bei dem Konstrukt sagt mir das Studio, dass er "else if" nicht> kennt... Was is das fürn mist?
1) Das Studio sagt dir gar nicht, sondern der Compiler, hier gcc.
2) Auch der GCC sagt dir nicht, dass er kein "else if" kennt, du hast
nur die Fehlermeldung nicht verstanden.
3) Auch GCC für AVR spricht ganz normales C.
4) Ihr braucht beide dringend ein C-Buch! Wer noch nichtmal
if-Anweisungen richtig kann, hat bisher noch nicht mal das schlechteste
Webtutorial angeschaut.
>> würde mich mal interessieren, ob ich nur die synthax falsch schreibe,
ja, richtig wäre Syntax.
>> Probier es doch mal mit "ELSE IF"
Shift Taste kaputt?
>> genau bei dem Konstrukt sagt mir das Studio, dass er "else if" nicht>> kennt... Was is das fürn mist?
.. und wenn Du zwischen die Klammern einfach mal eine Bedingung
schreibst?
int a = 1 ,b = 2;
if (a == b)
;
else if (2*a == b)
;
else
;
Stefan
Stefan schrieb:>>> Probier es doch mal mit "ELSE IF">> Shift Taste kaputt?
Ja, manchmal auch die Shift Taste.. Wenn du wüsstest, wie oft ich mein
Notebook schon flicken musste....
ui was eine illustre Runde!
ich muss ganz ehrlich mal sagen, dass ICH
ELSE IF
anders interprätiere!
IF () {..}
ELSE IF () {}
ELSE {}
als beispiel interprätiere ich so:
IF () {...}
ELSE {
IF () {}
ELSE
}
als anderen Programmiersprachen kenne ich das ELSEIF oder ELSIF.
Hab ja nur danach gefragt, versteh nicht, warum man sich immer aufregen
muss. Nirgendwo steht, dass ich ein C experte bin. Hab doch lediglich
nach ner möglichkeit gefragt sowas zu machen:
IF
ELSEIF
ELFEIF
ELFEIF
ELSE
mehr wollte ich nicht.
Hier wird gerne mal schnell mit der Keule geschwungen.
Allerdings wenn Du es nicht geschafft hast, ein "else if" selbst
nachzuschlagen, finde ich ehrlich gesagt traurig. Ob du wohl dazu
tatsächlich nicht fähig warst oder einfach keine Lust hattes, weiss ich
natürlich nicht und möchte ich Dir nicht unterstellen.
Peter II schrieb:> und wo soll das jetzt der unterschied sein?
ich hatte glaube ich schon gesagt, dass ich unter ELFE IF was anderes
verstehe als ELSEIF
wenn nun ELSE IF das gleiche ist wie ELSE { if (...) {...} }
dann hab ichs nun verstanden.
>wenn nun ELSE IF das gleiche ist wie ELSE { if (...) {...} }>dann hab ichs nun verstanden.
Das ist nicht das Gleiche.
Die öffnende gechwiffene Klammer leitet einen Block, ein
"Block-Statement" ein. Das ist nicht dasselbe wie ein Statement, wofür
"if" ein Beispiel ist.
if (...)
<statement>
else
if (...)
<statement>
else
<statement>
ist nur eine andere Schreibweise für
if (...)
<statement>
else if (...)
<statement>
else
<statement>
Du siehst aber an der Einrückung, dass das zweite if vom else-Zweig des
ersten abhängt.
Semantisch ist
if (...)
<statement>
else if (...)
<statement>
else
<statement>
hingegen durchaus genauso zu interpretieren wie das, etwa aus Perl
bekannte
if (...)
<statement>
elsif (...)
<statement>
else
<statement>
Du siehst aber an der Einrückung, das es sich syntaktisch um ein anderes
Konstrukt handelt.
Mir gefällt das Wort "interprätiere"... ;-)
Und "geschwiffene" auch.
if
elseif
elseif
elseif
...
ist funktional genau das selbe wie
if
else if
else if
else if
...
und wenn man das ein wenig anders formatiert, dann sieht das auch gleich
aus:
if
else if
else if
else if
...
Ab einer bestimmten Menge an else if auf die gleiche Variable empfehle
ich gerne switch-case.
switch ( var )
{
case 1:
mode_1();
case 2:
mode_2();
case 3:
mode_3();
default:
mode_0();
}
>Ab einer bestimmten Menge an else if auf die gleiche Variable empfehle>ich gerne switch-case.
So? Und wer will das wissen?
Das Thema hier ist ein ganz anderes.
Vielen Dank für den freundlichen Hinweiß.
Allerdings dachte ich in so einer Situation daran das solch eine
Konstruktion auch mal für die Variante "taste eine Variable auf mehrere
Möglichkeiten ab um entsprechend anders zu verfahren" verwendet wird...
auch wenn das unschön wird.
Shen Long schrieb:> Allerdings dachte ich in so einer Situation daran das solch eine> Konstruktion auch mal für die Variante "taste eine Variable auf mehrere> Möglichkeiten ab um entsprechend anders zu verfahren" verwendet wird...> auch wenn das unschön wird.
Wenn nicht die Hälfte fehlen würde.
mfg.
@Shen Long
In Deinem switch Beispiel fehlen die break Statements. So, wie Du das
geschrieben hast, werden bei var==1 alle 4 mode_n() Aufrufe
durchgeführt.
Chris schrieb:> obwohls das ja im ANSI C gibt>> if( Ausdruck1 )> Anweisung1;> else if( Ausdruck2 )> Anweisung2;> else if( Ausdruck3 )> Anweisung3;> .> .> else> AnweisungN;
Unsinn. Das ist keine "elsif"-Anweisung, sondern 2 Anweisungen. Ein
"else" und eine "if"-Anweisung.
Aber das ist ja wohl genau das, wonach der TO sucht.
Das der Begriff "if-Schleifen" Bullshit ist, wurde ja schon gesagt.
Chris schrieb:> genau bei dem Konstrukt sagt mir das Studio, dass er "else if" nicht> kennt... Was is das fürn mist?
Wie wär es, die Fehlermeldung zu posten. Was du behauptest kann
eigentlich gar nicht sein.
Oder hast du deinen Compiler gepatched?
Shen Long schrieb:> default:> mode_0();
Diese Empfehlung würde ich nicht unterschreiben.
Der "default-Zweig" sollte in gutem Code immer einem Fehlerfall
vorbehalten sein.
GanzSchlauer schrieb:> Hier ein Beispiel für eine if-Schleife:> main()> {> int i = 0;>> loop:> if(i < 10)> {> printf("%d\n", i);> i++;> goto loop;> }> }
Ganz schlau, aber nicht schlau genug!
Die Schleife wird gebildet durch das "goto" und das Label "loop".
Die "if-Anweisung" ist nur Teil des Blocks innerhalb der Schleife.
Shen Long schrieb:> Ab einer bestimmten Menge an else if auf die gleiche Variable empfehle> ich gerne switch-case.> switch ( var )> {> case 1:> mode_1();> case 2:> mode_2();> case 3:> mode_3();> default:> mode_0();> }
Vorsicht! "break;" nicht vergessen!
Sven schrieb:> Peter II schrieb:>> und wo soll das jetzt der unterschied sein?>> ich hatte glaube ich schon gesagt, dass ich unter ELFE IF was anderes> verstehe als ELSEIF
Ja, aber du hast nicht dazugeschrieben, was du denn nun darunter
verstehst.
Hmm schrieb:> Moooment: Ich muss Lothar noch sagen, das die "geschwiffene" Klammern> tatsächlich "geschwofte" sind.
Das sieht die Gesellschaft zur Stärkung der Verben aber anders. ;-)
Siehe http://verben.texttheater.net/Starke_Verben/S100.00.000AH schrieb:> Der "default-Zweig" sollte in gutem Code immer einem Fehlerfall> vorbehalten sein.
So eine Empfehlung habe ich noch nie gehört. Ich wüßte auch nicht, wozu
sie gut sein soll.
Rrolf Magnus schrieb:> So eine Empfehlung habe ich noch nie gehört. Ich wüßte auch nicht, wozu> sie gut sein soll.
Er hält seine fehlerhaften Programme halt für guten Code.
mfg.
>Hmm schrieb:>> Moooment: Ich muss Lothar noch sagen, das die "geschwiffene" Klammern>> tatsächlich "geschwofte" sind.>Das sieht die Gesellschaft zur Stärkung der Verben aber anders. ;-)>Siehe http://verben.texttheater.net/Starke_Verben/S
Uups. Sorry. Geschwiffen.