Char-Wert incrementieren

Gast #1801963
Lesenswert?
• ▲
▼
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?! :-(
Gast #1801985
Lesenswert?
• ▲
▼
> 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
Gast #1802053
Lesenswert?
• ▲
▼
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.
Gast #1802077
Lesenswert?
• ▲
▼
>> 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 :-)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.