Forum: Compiler & IDEs Wenn Wert zwischen X und X, dann.


von Finn (Gast)


Lesenswert?

Hallo,

ich möchte ein Softwaremäßiges blinken realisieren. Die Blinkreihenfolge 
ist relativ komlex.

Bisher habe ich einen Zähler jeden Zyklus einen um 1 hochzählen lassen 
und dann geschrieben.
1
if (pwm_Counter >=100)
2
{
3
     If (pwm_Counter < 200)
4
     {
5
            "LED an"
6
      }
7
Else 
8
{
9
     "LED aus" 
10
}

besser wäre ja:
if (pwm_Counter zwischen 100 und 200)
{
LED an
}


Danke schonmal für eure Hilfe.
Lg finnp

von Floh (Gast)


Lesenswert?

Finn schrieb:
> if (pwm_Counter >=100)
> {
>      If (pwm_Counter < 200)
>      {
>             "LED an"
>       }
> Else
> {
>      "LED aus"
> }

Preisfrage: Zu welchem if gehört das else?


> if (pwm_Counter zwischen 100 und 200)

wird auf 2 Bedingungen aufgeteilt, die UND-verknüpft werden:

if(pwm_Counter >= 100 && pwm_Counter < 200)
...
:-)

von Peter D. (peda)


Lesenswert?

1
switch( pwm_Counter ){
2
  case 100 ... 199:
3
                   // "LED an"
4
                   break;
5
  default:
6
                   // "LED aus" 
7
}


Peter

von Helmhut (Gast)


Lesenswert?

LED = (pwm_Counter >= 100 && pwm_Counter < 200)?AN:AUS;

von Finn (Gast)


Lesenswert?

Peter Dannegger schrieb:
> switch( pwm_Counter ){
>   case 100 ... 199:
>                    // "LED an"
>                    break;
>   default:
>                    // "LED aus"
> }
>
>
> Peter

Wofür steht das Break und Default?
Ich weis das ich oben eine } vergessen habe.
Sorry

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Finn schrieb:
> Wofür steht das Break und Default?

Lies in Deinem C-Buch nach, was switch/case tun.

Hast Du keins?

Brian Kernighan & Dennis Ritchie, "Programmieren in C", 2. Auflage, 
Hanser-Verlag.


Wobei Peter gemein war, was er da geschrieben hat, ist eine 
gcc-Spezialität. Eine Bereichsangabe bei case kennen andere Compiler 
nicht.

von Huch (Gast)


Lesenswert?

>Wobei Peter gemein war, was er da geschrieben hat, ist eine
>gcc-Spezialität. Eine Bereichsangabe bei case kennen andere Compiler
>nicht.

Da hier in letzter Zeit öfter Hinweise auf Syntax-Varianten kommen, die 
eigentlich gcc-Sonderfälle und nicht C-Standard sind, möchte ich Peter 
und auch andere höflich bitten darauf hinzuweisen. Man könnte so eine 
unnötige Diskussion oder Nachfrage vermeiden.

von Justus S. (jussa)


Lesenswert?

Huch schrieb:
> Da hier in letzter Zeit öfter Hinweise auf Syntax-Varianten kommen, die
> eigentlich gcc-Sonderfälle und nicht C-Standard sind, möchte ich Peter
> und auch andere höflich bitten darauf hinzuweisen. Man könnte so eine
> unnötige Diskussion oder Nachfrage vermeiden.

warum sollte man in einem GCC-Forum darauf hinweisen, dass der Code für 
GCC ist?

von Imon (Gast)


Lesenswert?

Justus Skorps schrieb:
> warum sollte man in einem GCC-Forum darauf hinweisen, dass der Code für
> GCC ist?

eher anders herum, man sollte darauf Hinweisen das der Code nur für denn 
gcc ist, sonst schlägt die Frage in einen anderen Bereich des Forum 
wieder auf in Form warum geht es nicht mit Compiler X.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Justus Skorps schrieb:
> warum sollte man in einem GCC-Forum darauf hinweisen, dass der Code für
> GCC ist?

Zwar bezieht sich dieses Forum auf GCC, aber auf GCC als C- (oder C++-) 
Compiler und nicht als Compiler für proprietäre nichtportable 
Sprachkonstrukte.

Solange das von Peter verwendete /case/-Statement nicht in einem 
C1x-Standard auftaucht, ist das deutlich als nichtportabel zu 
kennzeichnen.

von Huch (Gast)


Lesenswert?

Nun, obwohl es "formal" vielleicht sein mag, das man in einem GCC 
übertiteltem Forum, auch Code bzw. Beispiele erwarten kann, die 
ausschliesslich mit gcc funktionieren, meine ich, das es für alle Leser 
hilfreich sein wird, auf solche Fälle gesondert hinzuweisen.

Nicht weil man demjenigen, der solche Beispiele bringt irgendeinen 
Vorwurf machen könnte, sondern weil es einfach nur unterstützend wirkt, 
was ja irgendwie auch der Zweck des Forums ist. Wer solche Beispiele 
bringt ist auch sicherlich nicht "verpflichtet" einen Hinweis zu 
bringen, aber es würde der grundlegenden Absicht des Forums 
entgegenkommen zu helfen und zu unterstützen.

Mir selbst ist es auch schon so gegangen, dass ich bei einigen Fällen 
gestutzt habe, im K&R nachgelesen und dann erst durch Recherche 
festgestellt habe, das etwas eine gcc-Spezialität ist. Dabei halte ich 
mich für C-erfahren und einigermaßen sattelfest. So hätte mir ein 
kleiner Hinweis einige Mühe erspart. (Ich hätte vielleicht gleich in der 
gcc Dokumentation nachgeschaut).

Es geht mir also bei meiner Bitte um den Hinweis auf den gcc-Spezialfall 
wirklich nur um Unterstützung nicht darum ob man im Recht ist diesen 
wegzulassen oder nicht. Ich meine das alle Leser davon profitieren 
könnten.

von Mark B. (markbrandis)


Lesenswert?

Justus Skorps schrieb:
> warum sollte man in einem GCC-Forum darauf hinweisen, dass der Code für
> GCC ist?

Weil der Name für dieses Subforum etwas unglücklich gewählt ist. Wenn 
man sich die Themen hier ansieht, dann ist klar dass es eben nicht nur 
um die GNU Compiler Collection geht.

von Peter D. (peda)


Lesenswert?

Ich denke mal, da bricht keinem ein Zacken aus der Krone, wenn er 
einfach mal nachfragt, wenn ein Tip nicht funktioniert.
Daher halte ich es für müßig, nen Haufen Vermutungen anzustellen, wie 
jemand richtig antworten sollte.

Ich finde allerdings die Case-Bereiche für sinnvoll. Sie machen den Code 
deutlich besser lesbar gegenüber if-else-Monsterbäumen.
Und sogar Bascom kann das.
Ich habe auch vom Assemblerlisting her den Eindruck, der GCC kann den 
Code dann deutlich besser optimieren.

Man hat damit sogar einen Sinnfälligkeitscheck, d.h. die Case dürfen 
sich nicht überlappen.
Ich hatte z.B. mal ne if-else-Kolonne, die unsinnig war, weil ein 
Vergleich die falsche Richtung hatte. Ich habs nur daran gemerkt, daß 
der Code unerwartet kleiner wurde.


Peter

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
Noch kein Account? Hier anmelden.