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


von Bauform B. (bauformb)


Lesenswert?

1
  name = xml_value (buf, "name");
2
  attr = xml_value (buf, "value");
3
  ball = calloc (1, sizeof(pin_struct));
4
  ball->next = chip->balls;
5
  chip->balls = ball;
6
  ball->name = name;
7
  for (si = 0; si < SIGMAX; si++) {
8
     st = strchr (attr, ' ');
9
     if (st) { 
10
        *st++ = '\0';
11
     }
12
     ball->eagle_signal[si] = attr;
13
     ball->cube_signal[si] = attr;
14
     ball->signal[si] = attr;
15
     attr = st;
16
  } 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
1
for (si = 0; attr && si < SIGMAX; si++, attr = st) {
Ist das unmoralisch oder unverständlich oder gar doof?

: Gesperrt durch Moderator
von Peter p (Gast)


Lesenswert?

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

von Oliver S. (oliverso)


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

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Das sind halt zwei komplett unabhängige Schleifen hintereinander. Besser 
erkennt man es wenn man einen (wirklungslosen) Zeilenumbruch einfügt:
1
  for (si = 0; si < SIGMAX; si++) {
2
    // ...
3
  }
4
  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 "}"?

von Bauform B. (bauformb)


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.

von A. S. (Gast)


Lesenswert?

Also in den allermeisten Fällen findet gcc sowas, sonst lint nehmen.

 Warnungen einschalten

von Rolf M. (rmagnus)


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.

von Abend-Programm (Gast)


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.

von Jobst Q. (joquis)


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.

Beitrag #6818309 wurde von einem Moderator gelöscht.
Beitrag #6818352 wurde von einem Moderator gelöscht.
Beitrag #6818361 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.