Ich habe ein Stück Code, das fein kompiliert, wenn ich es in dieser Form schreiben (mit -Wjump-misses-init
flag):Warum gibt GCC mir die Warnung -Wjump-Misses-Init?
int some_function(void) {
...
if (is_error)
goto error;
int a;
a = 1;
return a;
error:
return 666;
}
Aber wenn ich die gleiche Funktion in dieser Form schreiben erhalte ich die unten Warnung, wenn ich kompilieren (?:
int some_function(void) {
...
if (is_error)
goto error;
int a = 1;
return a;
error:
return 666;
}
test.c: In function 'some_function':
test.c:15:17: warning: jump skips variable initialization [-Wjump-misses-init]
test.c:21:1: note: label 'error' defined here
test.c:17:13: note: 'a' declared here
Warum GCC mir nicht geben diese Warnung, wenn ich erklären und initialisieren a
auf der gleichen Linie scheint ein wenig seltsam für mich Diese Beispiele sind unsinnig, aber ich fürchte, ich bin nicht in Freiheit? Veröffentlichen Sie das echte Code-Snippet. Ich verwende GCC 4.7.2 auf Debian Wheezy 7.3.
EDIT: void Typo
In C++ darf [eine Deklaration mit Initialisierung nicht überspringen] (http://stackoverflow.com/questions/20963288/c-conditional-storage-allocation-for-object-craced-by-scope/20963326) # 20963326), aber ich habe Probleme, die gleiche Aussage in C99 zu finden. –
Ich frage mich, ob der Fehler mit verschiedenen Optimierungsflags gehalten wird. Oder wenn die Montage anders ist. Vielleicht ist die Reihenfolge der Operationen in einem Fall etwas anders. Es ist nur eine wilde Vermutung. – luk32
Auch "int void" sieht wie ein Tippfehler aus. –