Wir müssen einen const static char
-Zeiger in jeder Header- (.h) und Quelldatei (.cpp) definieren, um den Unternehmenscodierungsstandards zu entsprechen.
Wenn der Compiler kompiliert wird, generiert er eine Menge "definierter, aber nicht verwendeter" Warnungen. Hat jemand eine Lösung für dieses Problem, bitte?
%Vor%Mit dem obigen Compiler-Flag können wir diese Warnungen unterdrücken. Dies unterdrückt jedoch auch einige andere ungenutzte Parameter, die Aufmerksamkeit erfordern könnten. Wir haben diese Lösungen ausprobiert, die nur für Funktionsparameter funktionieren.
%Vor%in Qt und
%Vor%Vorherige ähnliche Frage:
Wie kann ich "Defined but nicht verwendet "Warnungen in GCC?
Erstens - die Kodierungsstandards des Unternehmens verschwenden wohl Platz. Wenn Sie das tun, dann verwenden Sie ein Array anstelle von char *
, so dass Sie nur die Daten und nicht einen Zeiger und die Daten speichern:
Als nächstes, vermutlich ist dies für die Dateiidentifikation - das ist zumindest, wofür ich es verwende. Es gibt mehrere Dinge, auf die man achten sollte, die aus der Erfahrung vieler Jahre gelernt wurden. (Ich möchte immer noch Versionsnummern in die Quelldateien einbetten - ich bin deswegen nicht aus vollem Herzen zu DVCS gewechselt.)
Ich verwende momentan Namen basierend auf dem Dateinamen: jlss_id_filename_c[]
etc.
Der AT & amp; T SVR4 C-Compiler und die Unterstützungssoftware unterstützten eine #ident
-Richtlinie:
Der Compiler hat die Strings in einen 'comments' Abschnitt in der Objektdatei eingefügt und ein Tool ( mcs
) um den Kommentarbereich zu manipulieren (Optionen -d
um es zu löschen und -c
um es zu komprimieren, IIRC) . Dieser Abschnitt war Teil der Binärdatei, wurde aber zur Laufzeit nicht in den Speicher geladen.
An einem Punkt in GCCs Entwicklung, in Verbindung mit den Befehlszeilenoptionen, die ich verwendete, erhielt ich Warnungen, wenn ich die Variable nicht so gut deklarierte und deklarierte, so dass mein 'Template' für die neue Quelldatei folgendes generiert:
%Vor%Normalerweise entferne ich die Deklaration jedoch in diesen Tagen und erhalte keine Compiler-Warnungen.
Als Alternative zur Verwendung des Dateinamens als Basis des Variablennamens können Sie einen UUID- oder GUID-Namen in hexadezimal angeben und diesen als Variablennamen verwenden, wobei ein Präfix dafür sorgt, dass das erste Zeichen alphabetisch ist.
In Kopfzeilen möchten Sie nicht, dass dieses Material in jeder Quellendatei definiert wird, die die Kopfzeile enthält, weil (a) es zu einem bemerkbaren (aber nicht notwendigerweise signifikanten) Aufwand für die Programmgröße wird und (b) Sie nicht multiplizieren können Definieren Sie globale Variablen (Sie können sie mehrfach deklarieren; das ist kein Problem). Also, meine Header haben eine Strophe wie:
%Vor% Wenn die Header die Werte definieren sollen, habe ich #define MAIN_PROGRAM
am Anfang der entsprechenden Quelldatei. Wenn Sie beispielsweise what errno
für ein Programm dieses Namens ausführen, bekomme ich die Ausgabe:
Dies ist ein vollständiges (und sehr nützliches) Programm, das den alten Stil des Geschäfts darstellt.
%Vor%Hinweis: Wenn das kompiliert wird, ist die Versionszeichenfolge nicht in der Binärdatei (oder der Objektdatei) enthalten. Dies gibt derzeit keine Warnung, wenn ich mit GCC 4.6.1 kompiliert habe, das auf MacOS X 10.7.2 kompiliert wurde:
%Vor% Wenn ich what al
ausführen, erhalte ich keine Identifikationsausgabe.
Wird die Variable jemals von einem externen Dienstprogramm referenziert, das die ausführbare Datei untersucht, oder ist es nur etwas, das Sie in der Quelle haben müssen?
Wenn Sie es nur in der Quelle haben müssen und es nicht in der kompilierten ausführbaren Datei sein muss, warum nicht #if
it out:
Der zusätzliche Vorteil dieser Methode besteht darin, dass Sie sich in den Headerdateien nicht mehr um Namenskonflikte kümmern müssen.
Man könnte immer herumhacken. z.B. %Code% Minimaler Rechenaufwand und es sollte die Warnung entfernen. Es ist möglich, dass diese Zeile für ein No-Op optimiert wird, da sie für das Programm inhärent nutzlos ist.
Es hängt davon ab, wie elegant Sie die Lösung haben wollen. Vielleicht kann jemand ein Compiler-Flag empfehlen, das die Warnung beseitigt.
Deklarieren Sie in einem globalen Header für Ihr Projekt ein Makro wie folgt:
%Vor%Dann sagen Sie in Ihren Dateien:
%Vor%Scheint zu funktionieren. Was auch immer man über Makros und das Einfügen von Token denken mag, zumindest mit einem Makro werden Sie in der Lage sein, diese Dinge zu finden und sie loszuwerden, wenn die Leute merken, dass sie albern sind. & lt; Shrugs & gt;