Forum: Mikrocontroller und Digitale Elektronik Warning beim Compilieren von C-Code


von Ratlos (Gast)


Lesenswert?

Habe hier folgenden Code (nicht selbst erstellt):
1
char * Ergebnis;
2
char Puffer[6];
3
T_SInt16 I,J,K;
4
5
...
6
7
  for(J=Laenge,K=5;J>=0,K>I;J--,K--)
8
    *(Ergebnis+J) = Puffer[K];

Mein C-Compiler meldet folgende Warning für die Zeile mit "for(....)" 
beim Compilieren:
warning: expression has no effect

Was habe ich übersehen? Kann es mir leider nicht erklären. Danke 
schonmal.

von Peter D. (peda)


Lesenswert?

Du verwirfst das Ergebnis von K>I.

Lies nochmal im C Buch den Kommaoperator durch.



Peter

von Stefan E. (sternst)


Lesenswert?

Das Komma im Bedingungs-Part macht keinen Sinn. Da muss ein && oder || 
hin.

von Εrnst B. (ernst)


Lesenswert?

Die Abbruchbedingung der for-Schleife ist: "J>=0,K>I".
Statt dem Komma gehört da eher ein "&&" rein, also
1
for(J=Laenge,K=5; J>=0 && K>I; J--,K--)

von Patrick (Gast)


Lesenswert?

Eine for-Schleife sollte so aussehen:
1
for(Initialisierung; Bedingung; Reinitialisierung) {
2
   /* Anweisungen */
3
}

Die Kommas, die Du da setzt, machen überhaupt keinen Sinn.

von Ratlos (Gast)


Lesenswert?

Super danke,

echt komisch. Slebst würd ich nie auf die Idee kommen bei der Bedingung 
ein Komma zu verwenden. Aber beim durchforsten von fremden Code ist es 
mir einfach nicht aufgefallen.

Schönen Tag noch!

von Karl H. (kbuchegg)


Lesenswert?

Patrick wrote:
> Eine for-Schleife sollte so aussehen:
>
1
for(Initialisierung; Bedingung; Reinitialisierung) {
2
>    /* Anweisungen */
3
> }
4
>
>
> Die Kommas, die Du da setzt, machen überhaupt keinen Sinn.

Doch. Die anderen beiden Kommas sind sehr wohl sinnvoll und
machen auch das was erwartet wird. Lediglich im Bedingungsteil
ist das Komma sinnlos.

von Stefan E. (sternst)


Lesenswert?

@ Peter Dannegger:

> Du verwirfst das Ergebnis von K>I.

Nein, er verwirft das Ergebnis von J>=0. ;-)

von Peter D. (peda)


Lesenswert?

Stefan Ernst wrote:
> Nein, er verwirft das Ergebnis von J>=0. ;-)

Stimmt natürlich.
Andersrum wäre blöd, dann könnte man ja keine Macros mit Returnwert 
schreiben.


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.