Gibt es eine Möglichkeit, Warnungen in Xcode zu unterdrücken?
Zum Beispiel rufe ich eine undokumentierte Methode auf und da sich die Methode nicht im Header befindet, wird beim Kompilieren eine Warnung angezeigt. Ich weiß, dass ich es meinem Header hinzufügen kann, um die Warnung zu stoppen, aber ich frage mich, ob es eine andere Möglichkeit gibt, als es dem Header hinzuzufügen (damit ich die Header sauber und standardmäßig halten kann), um die Warnung zu unterdrücken. Ein Pragma oder so?
objective-c
xcode
cocoa
cocoa-touch
suppress-warnings
kdbdallas
quelle
quelle
BOOL ok = [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&d interval:NULL forDate:self]; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);
Antworten:
Um Warnungen pro Datei zu deaktivieren, können Sie mit Xcode 3 und llvm-gcc-4.2 Folgendes verwenden:
Wobei der Warnname ein gcc-Warnflag ist.
Dies überschreibt alle Warnflags in der Befehlszeile. Es funktioniert jedoch nicht mit allen Warnungen. Fügen Sie Ihrer CFLAGS die Option -fdiagnostics-show-hinzu, und Sie können sehen, mit welchem Flag Sie diese Warnung deaktivieren können.
quelle
#pragma GCC diagnostic ignored "-Wwarning-flag"
bereits entfernt zu seinwarning-flag
eine der Warnungen ersetzen, die in gcc.gnu.org/onlinedocs/gcc/Warning-Options.htmlEs gibt eine einfachere Möglichkeit, nicht verwendete Variablenwarnungen zu unterdrücken :
BEARBEITEN: Quelle: http://www.cocoadev.com/index.pl?XCodePragmas
UPDATE: Ich bin auf eine neue Lösung gestoßen, eine robustere
User-Defined
: Finden (oder erstellen, wenn Sie keinen finden) den Schlüssel:GCC_WARN_UNUSED_VARIABLE
Setzen Sie ihn aufNO
.EDIT-2 Beispiel:
Der Compiler zeigt eine Warnung für nicht verwendete Variablen für an
ok
.Lösung:
PS: Sie können auch gesetzt / zurückgesetzt andere Warnung:
GCC_WARN_ABOUT_RETURN_TYPE
:YES/NO
quelle
Für gcc können Sie verwenden
Sie können hier mehr über das GCC-Pragma erfahren. Um den Warncode einer Warnung zu erhalten, rufen Sie den Berichtsnavigator (Befehl + 9) auf, wählen Sie den obersten Build aus, erweitern Sie das Protokoll (die Schaltfläche '=' rechts) und scrollen Sie zu unten und dort befindet sich Ihr Warncode in solchen eckigen Klammern
[-Wshadow-ivar]
Für Clang können Sie verwenden
quelle
Gehen Sie wie folgt vor, um eine Warnung für eine einzelne Datei zu unterdrücken:
Wählen Sie die Datei im xcode-Projekt aus. Drücken Sie get info, um zur Seite mit den Build-Optionen zu gelangen. Geben Sie -Wno- ein, um eine Warnung zu negieren:
z.B
Sie können den Namen der Warnung abrufen, wenn Sie sich die Projekteinstellungen ansehen. Sehen Sie sich die GCC-Warnungen unten auf der Registerkarte "Erstellen" an. Wenn Sie auf jede Warnung klicken, wird der Name des Warnparameters angezeigt:
z.B
quelle
...m:45:69: Incompatible pointer types sending...
Ich habe die Build-Erklärung geöffnet und finde diese Warnung:[-Wincompatible-pointer-types]
Ich habe sie einfach umbenannt-Wno-incompatible-pointer-types
und als Flag zu meiner.m
Datei hinzugefügt ... Boom keine weiteren Warnungen ... +10 wenn Ich könnteBei Objective-C werden einige schwerwiegende Fehler nur als Warnungen angezeigt. Ich deaktiviere nicht nur niemals Warnungen, sondern aktiviere normalerweise "Warnungen als Fehler behandeln" (-Fehler).
Jede Art von Warnung in Ihrem Code kann vermieden werden, indem Sie die Dinge korrekt ausführen (normalerweise indem Sie Objekte in den richtigen Typ umwandeln) oder wenn Sie Prototypen deklarieren, wenn Sie sie benötigen.
quelle
So entfernen Sie die Warnung: Erstellen Sie eine Kategorieschnittstelle für das betreffende Objekt
Abgesehen davon rate ich dringend davon ab , undokumentierte Methoden im Versandcode aufzurufen. Die Schnittstelle kann und wird sich ändern, und es wird Ihre Schuld sein.
quelle
http://nshipster.com/pragma/#inhibiting-warnings - Fahren Sie mit dem Abschnitt zum Sperren von Warnungen fort
quelle
Erstellen Sie eine neue, separate Header-Datei mit dem Namen "Undocumented.h" und fügen Sie sie Ihrem Projekt hinzu. Erstellen Sie dann einen Schnittstellenblock für jede Klasse, für die Sie undokumentierte Funktionen aufrufen möchten, und geben Sie jeder eine Kategorie von '(undokumentiert)'. Fügen Sie dann einfach diese eine Header-Datei in Ihren PCH ein. Auf diese Weise bleiben Ihre ursprünglichen Header-Dateien sauber, es muss nur eine weitere Datei verwaltet werden, und Sie können eine Zeile in Ihrem PCH auskommentieren, um alle Warnungen wieder zu aktivieren.
Ich verwende diese Methode auch für abgeschriebene Funktionen in 'Depreciated.h' mit der Kategorie '(Depreciated)'.
Das Beste daran ist, dass Sie einzelne Warnungen selektiv aktivieren / deaktivieren können, indem Sie die einzelnen Prototypen kommentieren oder auskommentieren.
quelle
Das Unterdrücken dieser bestimmten Warnung ist nicht sicher. Der Compiler muss die Typen der Argumente kennen und kehrt zu einer Methode zurück, um korrekten Code zu generieren.
Zum Beispiel, wenn Sie eine solche Methode aufrufen
[foo doSomethingWithFloat: 1.0];
Wenn ein Float erforderlich ist und kein Prototyp sichtbar ist, vermutet der Compiler, dass die Methode ein Double und kein Float verwendet. Dies kann zu Abstürzen und falsch interpretierten Werten führen. Im obigen Beispiel würde auf einer kleinen Endian-Maschine wie den Intel-Maschinen die Empfängermethode 0 übergeben sehen, nicht 1.
Sie können in den i386 ABI-Dokumenten nachlesen, warum , oder Sie können einfach Ihre Warnungen korrigieren. :-)
quelle