Verstehe die Warnung nicht: Wunused-value (Eclipse,GCC,C)

Gast #7027981
Lesenswert?

Hallo zusammen, ich verstehe hier den Grund der Warnung nicht. Kann mir 
jemand weiterhelfen? Es ist vllt nicht der schönste Code, aber er 
funktioniert und alle Variablen werden benötigt.

(Code wurde zur besseren Visualisierung als Bild gepostet)

Danke :)
Angehängte Dateien:
Gast #7028001
Lesenswert?

(prx) A. K. schrieb:
> Domenik schrieb:
>> aber er funktioniert
>
> Auch dann noch, wenn der jeweils gewünschte Buchstabe überhaupt nicht
> vorkommt?

Ich gehe einfach von einer fehlerfreien Übertragung aus 😁. Aber habe 
noch einen CRC in der aufrufenden Funktion.

loeti2 schrieb:
> Achso dein for(i; ...) wird wohl die Ursache sein.
> Schreib lieber for(; ...)

Verdammt, das war's 🙈🙈🙈. Ich habe echt lange überlegt. Danke

loeti2 schrieb:
> Die komplette Ausgabe der Warnings ist leider nicht lesbar.

Die komplette GCC Ausgabe wird von der IDE leider überschrieben, wenn 
erfolgreich kompiliert wird. D.h. um die GCC-Ausgabe anzuzeigen, muss 
man einen Fehler einbauen.
Gast #7028362
Lesenswert?

OMG schrieb:
> Ja, vor allem wenn man den Schleifenzähler innerhalb der
> Schleife noch wild verändert.
Wird er doch gar nicht.
Wird nur im Kopf der Schleifen geändert.
Wie es sich gehört.

Eigentlich ist es egal ob man einen Parser mir goto oder break baut.
Man nimmt hat das, was einem besser liegt.

Natürlich gibts auch andere Methoden.
Aber wirklich schöner wirds damit auch nicht.

Die vorgefertigten strtok(), sscanf() und ihre Geschwister könnte man 
natürlich auch verwenden.
Gast #7028366
Lesenswert?

Domenik schrieb:
> (prx) A. K. schrieb:
>> Domenik schrieb:
>>> aber er funktioniert
>>
>> Auch dann noch, wenn der jeweils gewünschte Buchstabe überhaupt nicht
>> vorkommt?
>
> Ich gehe einfach von einer fehlerfreien Übertragung aus 😁. Aber habe
> noch einen CRC in der aufrufenden Funktion.

Das hilft dir nicht. Stefan hat das schon verstanden:

Stefan ⛄ F. schrieb:
> Wie oft wird eigentlich eine for-Schleife ohne Bedingung wiederholt?
>
> for (i; ; i++)

Ich würde dir generell empfehlen, die Syntax einer for-Schleife noch 
einmal genau nachzulesen. Das hätte dir vermutlich auch die 
Ausgangsfrage beantwortet: i als Statement hat keinen Effekt. Tut nix. 
Egal ob mitten im Code:
1
int i = 0;
2
i++;
3
i;

Oder eben wie bei dir an erster Stelle im Schleifenkopf.

Und im Übrigen gibt es für deine Aufgabe auch bereits 
Bibliotheksfunktionen wie strchr / strstr, die den Code lesbarer machen 
und dir dumme Fehler beim Implementieren ersparen können.

MfG, Arno
Gast #7028535
Lesenswert?

Anselm schrieb:
> for(i; "unbekannte bedingung"; i++) kann nicht funktionieren

Das ist keine "unbekannte bedingung" sondern eine "leere bedingung"
Und damit gültiges C oder C++.
Das funktioniert wie im Grundlagenbuch beschrieben.

Bedenke:
Die Entscheidung wird im Schleifenkörper getroffen und dieser ggf. mit 
break verlassen.

Also alles im grünen Bereich, vielleicht nicht schön, aber von der Seite 
her ok.
Gast #7028688
Lesenswert?

Dergute W. schrieb:
> Moin,
>
> Anselm schrieb:
>> for(i; "unbekannte bedingung"; i++) kann nicht funktionieren
>
> Doch, natuerlich "funktioniert" das. Man darf sich halt nicht wundern.
> Ist bestimmt wieder dieses boese C dran schuld. Wenn der Bauer nicht
> schwimmen kann, liegts an der Badehose.

In jeder "normalen" Sprache wird ein FOR ohne Next oder anderweitige 
Bedingung sofort mit Husten und Spucken des Compilers beantwortet. Weil 
das Unfaug ist.

C an sich ist aber noch größerer Unfug, wenn es solche Konstrukte ohne 
Murren zuläßt.
Gast #7028700
Lesenswert?

(prx) A. K. schrieb:
> Du musst die knappe Syntax von C nicht mögen, aber wenn du C nutzt,
> solltest du die Sprache zumindest kennen. Ein for(;;) als Dauerschleife
> war von Anfang an ausdrücklich vorgesehen und ist ganz offen
> dokumentiert.

Ich mag nicht nur die knappe Syntax nicht, ich mag C als Ganzes nicht. 
Deshalb nutze ich es auch nicht, weil ich auf Fußangeln und 
Stolperfallen gut verzichten kann.

In der allergrößten Not würde ich ein While(1) vorziehen.
Moderator #7028718
Lesenswert?

Das Fehlen der Bedingung im For-Kopf heißt – was würde man auch anderes
erwarten – "bedingungslos". Somit läuft die Schleife so lange, bis sie
anderweitig (bspw. durch break) abgebrochen wird.

Großes Zeh Buch schrieb:
> In jeder "normalen" Sprache wird ein FOR ohne Next

Next gibt es nur in Basic und verwandten Sprachen. Wenn du nur diese als
normale Sprachen ansiehst, ist dein Teller eine Suppenschüssel mit
Deckel :)

> oder anderweitige Bedingung

Next ist keine Bedingung, sondern lediglich die Markierung des
Schleifenendes.

> sofort mit Husten und Spucken des Compilers beantwortet.

Wenn mich der Compiler anhusten oder gar anspucken würde, würde ich aber
sofort zurückspucken. Er hat mich gefälligst freundlich auf meine
Fehler hinzuweisen ;-)
Gast #7029565
Lesenswert?

Yalu X. schrieb:

> Das Fehlen der Bedingung im For-Kopf heißt – was würde man auch anderes
> erwarten – "bedingungslos". Somit läuft die Schleife so lange, bis sie
> anderweitig (bspw. durch break) abgebrochen wird.

So ist es. Der Schwachsinn bei C ist halt nur, das ein Konstrukt, was 
dazu prädestiniert ist, eie abzählbare Anzahl von Iterationen zu 
liefern, auch mißbraucht werden kann, um eine unbegrenzte Anzahl von 
Iterationen auszuführen. Das ist nicht sehr logisch, insbesondere nicht 
unter den Aspekt, dass mit while() ja ein viel besser geeignetes 
Konstrukt zur Verfügung steht, bei dem man die Intention LESBAR 
angeben muss.

Aber klar, logisch ist C ja sowieso nicht.

> Next gibt es nur in Basic und verwandten Sprachen. Wenn du nur diese als
> normale Sprachen ansiehst, ist dein Teller eine Suppenschüssel mit
> Deckel :)

Mein Gott, häng' dich jetzt nicht an konkreten Schlüsselwörtern 
konkreter Sprachen auf. Die sind doch Wurscht. Es geht um die Intention 
einer Kontrollstruktur. Und um die Restriktionen, die die verfickte 
Sprache anwendet, um die intentionsgerechete Verwendung sicher zu 
stellen.

Und da kackt C einfach mal ganz fürchterlich ab.
Gast #7029569
Lesenswert?

1
for( hier sind meine Start-Bedingungen; 
2
     hier sind meine Ende-Bedingungen;
3
     tue unbedingt dies bei jedem Durchgang )
Finde ich persönlich jetzt gar nicht mal so schlecht.
Ist aber sicherlich Geschmackssache.
Gast #7029581
Lesenswert?

Norbert schrieb:
> for( hier sind meine Start-Bedingungen;
>      hier sind meine Ende-Bedingungen;
>      tue unbedingt dies bei jedem Durchgang )
> Finde ich persönlich jetzt gar nicht mal so schlecht.
> Ist aber sicherlich Geschmackssache.

Das ist ja auch die vollkommen normale Verwendung. Darum geht es aber 
hier nicht.
Gast #7029601
Lesenswert?

c-hater schrieb:
> insbesondere nicht
> unter den Aspekt, dass mit while() ja ein viel besser geeignetes
> Konstrukt zur Verfügung steht,

Ist das wirklich in diesem Fall auch so?

Mir scheint beides nicht so gelungen:
1
  while(1)
2
  {
3
    //hier tu das eine
4
    if(bedingung) break;
5
    //hier tu noch was anderes
6
    i++;
7
  }
8
  
9
  for(;;i++)
10
  {
11
    //hier tu das eine
12
    if(bedingung) break;
13
    //hier tu noch was anderes
14
  }
Die for Variante spart immerhin ein paar Tastendrücke ein
(wenn man denn darauf Wert legt)
Gast #7029604
Lesenswert?

Schauspieler-Entdecker schrieb:
> Norbert schrieb:
>> for( hier sind meine Start-Bedingungen;
>>      hier sind meine Ende-Bedingungen;
>>      tue unbedingt dies bei jedem Durchgang )
>> Finde ich persönlich jetzt gar nicht mal so schlecht.
>> Ist aber sicherlich Geschmackssache.
>
> Das ist ja auch die vollkommen normale Verwendung. Darum geht es aber
> hier nicht.
Hmmm, ist das so?
1
for (Ich habe keine Start-Bedingungen;
2
     Ich habe keine Ende-Bedingungen;
3
     Es gibt hier oben nichts was _unbedingt_ getan werden muss) {
4
         Mach solange dies hier,
5
         zumindest bis ich Ende sage
6
}
Gast #7029609
Lesenswert?

EAF schrieb:
> Mir scheint beides nicht so gelungen:
>   while(1)
>   {
>     i++;
>   }
>
>   for(;;i++)
>   {
>   }
> Die for Variante spart immerhin ein paar Tastendrücke ein
> (wenn man denn darauf Wert legt)

Na ja, spätestens wenn irgendwo im Rumpf ein continue an ungünstiger 
Stelle vorkommt, könnte es sich als nützlich erweisen trotzdem 
bedingungslos i zu inkrementieren (wenn man es denn will)
Ich wäre demnach für Version 2.
Gast #7029613
Lesenswert?

(prx) A. K. schrieb:
> Ob diese Empfehlung für Programmierung in einer als geschwätzig
> bekannten Sprache wohl Gefallen findet? Immerhin kann keinerlei Zweifel
> aufkommen, was damit gemeint ist:PERFORM UNTIL 1 < 0
>    DISPLAY "Something"
> END-PERFORM
> https://programming-idioms.org/idiom/50/make-an-infinite-loop/3307/cobol

Manche Leute ekeln sich aber auch vor gar nichts! ;-)
#7029622
Lesenswert?

Mit C, C++ und Java Unzufriedene, einschliesslich des alten Hasens Ken 
Thompson, haben bei Google eine Sprache "Go" definiert. Und dabei völlig 
zurecht erkannt, dass for(;;) an sich der richtige Ansatz ist, aber viel 
zu umständlich:
1
for {
2
  ...
3
}
Besonders sprechend ist sicherlich Haskell:
1
let x = x in x
Gast #7029653
Lesenswert?

Ach da gibt's so Einiges bei dem ich nicht sicher bin ob's vielleicht 
doch nur ein fürchterlich missglückter Scherz war.
Zum Beispiel als ein paar betrunkene Mauer zusammen saßen und einer 
sagte ›Halt mal mein Bier‹
Und die anderen meinten: Das traust du dich nicht!

Na und mit der PHP-Schweinerei müssen nun alle leben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren