Ich habe mich gefragt, wie eine Funktion eine Kompilierungswarnung ausgeben kann?
Das kam mir in den Sinn, weil der Compiler eine Warnung ausgibt, wenn wir im ersten Argument von printf (scanf) einen falschen Formatbezeichner für die mit diesem Typspezifizierer übereinstimmende Variable angeben und mit gcc mit der Option -Wall kompilieren >
Nun, printf und scanf sind regelmäßig variadic Funktionen implementiert, wie ich es verstehe, und ich weiß keine Möglichkeit, den Wert der Zeichenfolge zum Zeitpunkt der Kompilierung zu überprüfen, geschweige denn eine Warnung ausgeben, wenn etwas nicht stimmt.
Kann mir jemand erklären, wie ich dann Compilerwarnung bekomme?
Warnungen sind Implementierungen (d. h. Compiler & amp; C-Standardbibliothek ) spezifisch. Sie könnten einen Compiler haben, der nur sehr wenige Warnungen enthält (schauen Sie in tinycc ...), oder gar keinen ...
Ich konzentriere mich auf einen kürzlichen GCC (zB 4,9 oder 5.2 ...) unter Linux.
Sie erhalten solche Warnungen, weil printf
mit dem entsprechenden __attribute__
deklariert ist (siehe GCC Funktionsattribute )
(Mit GCC können Sie ebenfalls Ihre eigenen printf
-ähnlichen Funktionen mit dem format
-Attribut deklarieren. .)
BTW, ein standardkonformer Compiler kann den Header <stdio.h>
ganz besonders implementieren. So könnte #include <stdio.h>
verarbeitet werden, ohne eine Header Datei zu lesen, sondern indem der interne Status geändert wird.
Und Sie könnten sogar Ihre eigenen Funktionsattribute hinzufügen, z. indem Sie Ihren GCC mit MELT
anpassenWie kann printf eine Compiler-Warnung ausgeben?
Einige Compiler analysieren das Format und andere Argumente von printf()
und scanf()
zur Kompilierzeit.
Wenn das Format jedoch berechnet wird, findet diese Überprüfung nicht statt, da es sich um ein Laufzeitproblem handelt.
%Vor%