In gcc erfordern bestimmte Warnungen, dass die Optimierung aktiviert wird. Beispiel:gcc schaltet um, um die Analyse für Warnungen zu aktivieren
int foo() {
int x;
return x;
}
Um die nicht initialisierte Variable zu erkennen, muss -O übergeben werden.
$ gcc -W -Wall -c test.c
$ gcc -W -Wall -c test.c -O
test.c: In function ‘foo’:
test.c:3: warning: ‘x’ is used uninitialized in this function
Dies kann jedoch das Debugging beeinträchtigen. Gibt es eine Möglichkeit, nur die Analysephasen zu aktivieren, die für Warnungen benötigt werden (und nicht nur diese bestimmte Warnung, sondern so viele wie möglich), ohne den generierten Code zu sehr zu beeinflussen?
Ich benutze gcc Version 4.3.3 (Ubuntu 4.3.3-5ubuntu4) auf x86-64.
Die dumme Antwort wäre, es mit -O für die Warnungen zu kompilieren, und dann ohne es für das Debuggen. Ich hoffe wirklich, dass es einen besseren Weg gibt. – Zifre
Der Grund, warum gcc diese Warnung nicht ohne -O ausgibt, ist, dass es keine Datenflussanalyse ohne -O durchführt. Sie bitten es also, das DFA auszuführen, aber die Ergebnisse zu verwerfen, außer sie zu verwenden, um Warnungen auszugeben. Dies würde ungefähr so lange dauern, wie es mit -O kompiliert wird, obwohl hoffentlich nicht so lange wie Zifres Vorschlag. Aber ich kenne keine Möglichkeit, gcc dazu zu bringen, und die Manpage impliziert, dass es unmöglich ist. –
-O ist schnell genug, ich hoffe nur, es wird nicht Debugging mist. Vorschläge zur Aktivierung bestimmter Optimierungsphasen, die gdb nicht unterbrechen, aber eine Warnanalyse durchführen, sind ebenfalls willkommen. – bdonlan