statisch const char * - definiert, aber nicht verwendet

7

Wir müssen einen const static char -Zeiger in jeder Header- (.h) und Quelldatei (.cpp) definieren, um den Unternehmenscodierungsstandards zu entsprechen.

%Vor%

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?

    
ramtheconqueror 29.11.2011, 14:12
quelle

8 Antworten

11

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:

%Vor%

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.)

  1. Um die Warnungen zu vermeiden, müssen Sie die Symbole außerhalb der Datei sichtbar machen.
  2. Das bedeutet wiederum, dass Sie die Variablennamen eindeutig machen müssen.
  3. Ich verwende momentan Namen basierend auf dem Dateinamen: jlss_id_filename_c[] etc.

    %Vor%
  4. Der AT & amp; T SVR4 C-Compiler und die Unterstützungssoftware unterstützten eine #ident -Richtlinie:

    %Vor%

    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.

  5. 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.

  6. 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.

  7. 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:

    %Vor%

Old-style

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.

    
Jonathan Leffler 29.11.2011, 14:54
quelle
17

In diesem Fall ist es normalerweise auch ein Zeiger const, Also versuche zu verwenden:

%Vor%     
kelviN 14.12.2012 11:53
quelle
4

Sehen Sie sich __attribute__((used)) an .

    
user405725 29.11.2011 14:16
quelle
1

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:

%Vor%

Der zusätzliche Vorteil dieser Methode besteht darin, dass Sie sich in den Headerdateien nicht mehr um Namenskonflikte kümmern müssen.

    
Some programmer dude 29.11.2011 14:19
quelle
0

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.

    
Chris Parton 29.11.2011 14:16
quelle
0

Definieren Sie dies in einem einzelnen Header, definieren Sie eine einzelne Inline-Funktion in der Kopfzeile, um den Wert des Zeigers zu "holen", und fügen Sie diesen Header dann überall dort ein, wo Sie die Definition benötigen.

    
nadime 29.11.2011 14:28
quelle
0

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;

    
HostileFork 29.11.2011 14:29
quelle
0

one_time_param.h

%Vor%

one_time_param.cpp

%Vor%

Fügen Sie dann one_time_param.h in jedem & amp; jede Kopfzeile und Quelldatei.

& lt; scrathes Kopf & gt; Dies funktioniert natürlich nicht, wenn Sie static benötigen.

    
jrok 29.11.2011 14:46
quelle

Tags und Links