Wie kann ich debug "INT_MAX schwarzarbeit"
printf(INT_MAX);
Grenzen.h enthalten ist, aus irgendeinem Grund funktioniert es nicht in diesem Projekt. In meiner Testumgebung funktioniert es einfach. Ich habe keine Ahnung, wie zur Lösung dieses Problems andere als die Beseitigung jeder einzelnen Datei in das gesamte Projekt, bis es beginnt zu arbeiten. Das wäre eine unmenschliche Menge an Arbeit. Wie finde ich diesen Fehler schneller? Was sind häufige Ursachen?
sind Sie sicher, dass Sie die richtigen Grenzen.h? Es gibt keine anderen Grenzen.h, dass könnte es abholen? Wenn Sie gcc verwenden, versuchen Sie es mit der option-E produzieren und die Ausgabe des Präprozessor, ie Einbeziehung der header, definieren Sie die substitution etc. Das kann einen Tipp geben, was Los ist.
-1 für gefälschte code und auslassen der Dinge, die relevant für den Fehler.
-1 für gefälschte code und auslassen der Dinge, die relevant für den Fehler.
InformationsquelleAutor Blub | 2011-07-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie haben gesucht, Sie Ihren eigenen code und build-system für die Fälle, in denen
INT_MAX
bekommen könnte undefiniert.Wenn möglich, einen Weg finden, kompilieren Sie nur die eine Quell-Datei (
.c
), so dass Ihr iteration Geschwindigkeit geht. Es ist genug, wenn IhrMakefile
(oder was auch immer Sie verwenden) bereits kompiliert nur die geänderte Datei, anstatt alles.Dann in die problematische Datei, fügen Sie diese vor dem ersten
#include
, und nach jedem#include
:Dann wieder auf die Modul-und sehen, wo der Fehler passiert.
Wenn das fehlschlägt, fügen Sie das code-snippet oben hier und dort in den code, um zu sehen, wo es wird nicht definiert.
Wenn es stellt sich heraus, dass Ihre
<limits.h>
ist nicht definieren, es gibt mindestens zwei Möglichkeiten:limits.h
als der standardHappy hacking.
PS. Wenn Sie brauchen, um zu gehen durch den Prozess der Beseitigung von Dateien, das problem zu finden, beachten Sie, dass Sie verwenden können, binäre Suche, um Dinge zu beschleunigen: entfernen Sie zuerst die eine Hälfte der Dateien, und wenn das problem weiterhin Auftritt, wissen Sie, dass es in den übrigen Dateien, und wenn nicht, in den Dateien, die Sie entfernt haben, oder, selten, in der Interaktion zwischen den zwei Arten von Dateien. Iteriere mit dem entsprechenden Satz von Dateien, bis Sie einzugrenzen, um etwas hinreichend klein.
Dann mit
#include <limits.h>
eher als#include "limits.h"
vermieden hätte, das problem in den ersten Platz. Auch, es sei denn, es gibt einen wirklich guten Grund dafür, ist es wahrscheinlich eine schlechte Idee zu geben, eine Projekt-spezifische header den gleichen Namen wie eine der standard-header.Ich habe das richtige zählen, ich habe keine Ahnung, warum es immer noch verwendet, das Projekt der breiten header
InformationsquelleAutor
Stellen Sie sicher, dass die include-Direktive wird
nicht
Zeigen uns ein komplettes Programm, das zeigt das problem, zusammen mit der genauen Fehlermeldung, die Sie bekommen. Kopieren und einfügen von Ihnen. Und wenn Sie den Aufruf von printf(), nicht zu vergessen die
Und versuchen, kompilieren und ausführen dieses Programms:
Es sollte korrekt funktionieren, ohne Fehlermeldungen oder Warnungen. Wenn nicht, kann es etwas falsch mit Ihrem compilation-system, oder mit der Art, wie Sie installiert oder konfiguriert werden, oder mit der Art, wie Sie Sie verwenden.
InformationsquelleAutor Keith Thompson
Dieser code wird nie funktionieren, weil
printf
nimmt einen Zeiger auf eine format-string als erstes argument.INT_MAX
ist nicht ein Zeiger auf ein format-string, sondern ein integer.Was Sie wollen, ist
printf("%d", INT_MAX)
.Das ist nicht stark genug Grund, downvote ihn.
Ich bin dankbar für jede Hilfe die ich bekommen kann, aber das ist einfach nicht eine Antwort von einer Strecke der Sinne. Ein Kommentar gewesen wäre zweckmäßig.
Wenn ich unter "code" so, ich bin geneigt zu denken, dass entweder Sie haben keine Ahnung, was Sie tun, und so wird die Fehlermeldung, die Sie zitieren können aus einer vollkommen anderen version - oder, dass Sie das posten von "fake-code", was es unmöglich macht, zu beantworten.
Ich downvoted Ihren Beitrag, weil Sie zusätzliche Informationen, die Sie Gaben uns gefälschte code und keine Informationen über die Antwort auf Ihre Frage. Vor, dass, obwohl ich Sie wirklich einfach nicht wissen, wie
printf
und ich habe versucht, um eine vernünftige Antwort. Aber mit den neuen Infos, deine Frage ist einfach unbeantwortbar, und als solches verdient er eine -1.InformationsquelleAutor R..