Warum wird im folgenden Code die Variable i
nicht mit dem Wert 1
belegt?Variablendefinition innerhalb der Schalteranweisung
#include <stdio.h>
int main(void)
{
int val = 0;
switch (val) {
int i = 1; //i is defined here
case 0:
printf("value: %d\n", i);
break;
default:
printf("value: %d\n", i);
break;
}
return 0;
}
Wenn ich kompilieren, erhalte ich eine Warnung über i
trotz int i = 1;
initialisiert wird, dass es deutlich
$ gcc -Wall test.c
warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
printf("value %d\n", i);
^
Wenn val = 0
initialisiert, dann wird der Ausgang 0
ist.
Wenn val = 1
oder irgendetwas anderes, dann ist auch der Ausgang 0.
mir bitte erklären, warum die Variable i
deklariert, aber nicht innerhalb des Schalters definiert. Das Objekt mit der ID i
existiert mit der automatischen Speicherdauer (innerhalb des Blocks), wird jedoch niemals initialisiert. Warum?
Ich frage nach vor dem Fall Etikett Variablendefinition Freund. Weil ich versuche, zu benutzen, ist ich lokale Variable innerhalb des Schalters. – sakthi
Schließen Sie bitte nicht als C++ - Duplikat. Finden Sie eine C-Version. – 2501
Dies ist kein Duplikat des Posts von @ user3121023, da in der verknüpften Frage die Deklaration von "i" in ** eine "case" -Anweisung ist, also wickle man sie einfach um Klammern. In diesem Fall steht die Deklaration von "i" außerhalb jeder "case" -Anweisung, ich bin mir nicht sicher, ob dies gültig ist. – Holt