Hallo ich nutze den Codevisioncompiler und bin auf folgendes Problem gestoßen: char Anzahl = 0x06; Anzahl = Anzahl++; // Anzahl ist nun 0x07 ... Anzahl = 0x06; Anzahl = Anzahl++; // Anzahl BLEIBT NUN 0x06!! Anzahl = Anzahl + 1; // Anzahl wird um 1 erhöht wo bleibt hier die Logik?! Kann mir dass irgendwer erklären?! Bin an diesem Fehler nun fast verzweifelt?! :-(
Frank schrieb: > Anzahl = Anzahl++; // Anzahl BLEIBT NUN 0x06!! weil Anzahl++ als return den wert vor dem ++ liefert. so sollte es gehen Anzahl = ++Anzahl; macht aber wenig, bis gar kein sinn.
> Anzahl = Anzahl++; // Anzahl BLEIBT NUN 0x06!!
Das ist mehr oder weniger undefiniert. Letztenendes ist nur das
interessant, was der Compiler sagt, und der sagt mal wieder alles:
1 | $ cat main.c |
2 | #include <stdio.h> |
3 | |
4 | int main() |
5 | { |
6 | char Anzahl = 0x06; |
7 | |
8 | printf("1: %d\n", Anzahl); |
9 | |
10 | Anzahl = Anzahl++; // Anzahl ist nun 0x07 |
11 | printf("2: %d\n", Anzahl); |
12 | |
13 | Anzahl = 0x06; |
14 | Anzahl = Anzahl++; // Anzahl BLEIBT NUN 0x06!! |
15 | printf("1: %d\n", Anzahl); |
16 | |
17 | Anzahl = Anzahl + 1; // Anzahl wird um 1 erhöht |
18 | printf("1: %d\n", Anzahl); |
19 | |
20 | return 0; |
21 | } |
22 | $ gcc -Wall -o main main.c |
23 | main.c: In function ‘main’: |
24 | main.c:9: warning: operation on ‘Anzahl’ may be undefined |
25 | main.c:13: warning: operation on ‘Anzahl’ may be undefined |
26 | $ ./main |
27 | 1: 6 |
28 | 2: 7 |
29 | 1: 7 |
30 | 1: 8 |
Entgegen landläufiger Meinung sind Warnings nicht dazu da um ignoriert zu werden. HTH
Google mal nach „sequence points“. Von mir aus auch im Zusammenhang mit „i = i++“. Da werden Sie geholfen.
g457 schrieb: >> Anzahl = Anzahl++; // Anzahl BLEIBT NUN 0x06!! > > Das ist mehr oder weniger undefiniert. Nicht nur "mehr oder weniger". Das Verhalten dieser Zeile ist nach ISO-C undefiniert, was bedeutet, daß beliebige Dinge passieren können. > Letztenendes ist nur das interessant, was der Compiler sagt, und der sagt > mal wieder alles: Was die Norm sagt, ist auch interessant.
>> Letztenendes ist nur das interessant, was der Compiler sagt, und der sagt >> mal wieder alles: > > Was die Norm sagt, ist auch interessant. Nur dann wenn der Compiler sich daran hält ;-) Aber Du hast schon recht, nur sind wir beide zu faul den entsprechenden Teil rauszuzitieren. Ausserdem liest kaum jemand zuerst die Norm wenns Probleme gibt. Da sind ein paar aussagekräftige Warnings dann schon sehr praktisch :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.