mikrocontroller.net

Forum: Compiler & IDEs meine while Schleife funktioniert nicht ;)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Bauform B. (bauformb)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
  name = xml_value (buf, "name");
  attr = xml_value (buf, "value");
  ball = calloc (1, sizeof(pin_struct));
  ball->next = chip->balls;
  chip->balls = ball;
  ball->name = name;
  for (si = 0; si < SIGMAX; si++) {
     st = strchr (attr, ' ');
     if (st) { 
        *st++ = '\0';
     }
     ball->eagle_signal[si] = attr;
     ball->cube_signal[si] = attr;
     ball->signal[si] = attr;
     attr = st;
  } while (attr);
Der gcc merkt nichts. Ich finde es bemerkenswert. Nachdem es syntaktisch 
o.k. ist, wäre es doch nett, wenn es auch funktionieren würde.

Das war mal eine do {} while() Schleife, dann hab' ich das SIGMAX dazu 
gebaut.
Jetzt schreibe ich
for (si = 0; attr && si < SIGMAX; si++, attr = st) {
Ist das unmoralisch oder unverständlich oder gar doof?

Autor: Peter p (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt for Schleifen und while Schleifen. Aber keine for-while 
Schleifen. Nach anstatt while eine if then break in der for Schleife

Autor: Oliver S. (oliverso)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Bauform B. schrieb:
> Der gcc merkt nichts. Ich finde es bemerkenswert.

Ich nicht. Das ist syntaktisch einwandfreies C. Und es wird auch 
funktionieren.

Oliver

Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sind halt zwei komplett unabhängige Schleifen hintereinander. Besser 
erkennt man es wenn man einen (wirklungslosen) Zeilenumbruch einfügt:
  for (si = 0; si < SIGMAX; si++) {
    // ...
  }
  while (attr);
Die while-Schleife läuft also endlos wenn attr nicht 0 ist, und macht 
sonst gar nichts. Natürlich merkt der GCC hier nicht ob das so gewollt 
ist...

Bauform B. schrieb:
> Jetzt schreibe ich

Warum machst du das "attr=str" nicht einfach ans Ende der Schleife, vor 
das "}"?

Autor: Bauform B. (bauformb)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Oliver S. schrieb:
> Bauform B. schrieb:
>> Der gcc merkt nichts. Ich finde es bemerkenswert.
>
> Ich nicht. Das ist syntaktisch einwandfreies C. Und es wird auch
> funktionieren.

Das ist ja das ärgerliche, die Maschine macht immer genau was ich 
sage...

Niklas G. schrieb:
> Das sind halt zwei komplett unabhängige Schleifen hintereinander.
> Besser erkennt man es wenn man einen (wirklungslosen)
> Zeilenumbruch einfügt:
1:0 für Python

> Warum machst du das "attr=str" nicht einfach ans Ende der Schleife, vor
> das "}"?

na gut, überredet, danke.

Autor: A. S. (achs)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Also in den allermeisten Fällen findet gcc sowas, sonst lint nehmen.

 Warnungen einschalten

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Bauform B. schrieb:
> Oliver S. schrieb:
>> Bauform B. schrieb:
>>> Der gcc merkt nichts. Ich finde es bemerkenswert.
>>
>> Ich nicht. Das ist syntaktisch einwandfreies C. Und es wird auch
>> funktionieren.
>
> Das ist ja das ärgerliche, die Maschine macht immer genau was ich
> sage...

Eine der wichtigsten Erkenntnisse der Programmierung: Der Computer macht 
nie das, was du willst, sondern das, was du programmierst.

Autor: Abend-Programm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:

> Eine der wichtigsten Erkenntnisse der Programmierung: Der Computer macht
> nie das, was du willst, sondern das, was du programmierst.

...und abhängig vom Compiler auch bei gleichem Quelltext nicht immer das 
Gleiche.

Autor: Jobst Q. (joquis)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Abend-Programm schrieb:
> ...und abhängig vom Compiler auch bei gleichem Quelltext nicht immer das
> Gleiche.

Diese Abhängigkeit ist aber auch abhängig vom Quelltext.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.