Hoe kan ik “gedefinieerde maar niet gebruikte” waarschuwingen in GCC verbergen?

Ik heb een heleboel beweringen over de compileertijd, zoals:

CASSERT(isTrue) or CASSERT2(isTrue, prefix_)

Bij het compileren met GCC krijg ik veel waarschuwingen zoals 'prefix_LineNumber' defined but not used. Is er een manier waarop ik waarschuwingen voor beweringen over de compileertijd kan verbergen? Ik had geen geluk bij het doorzoeken van de GCC-documentatie. Ik dacht dat ik de var misschien automatisch globaal binnen dezelfde macro zou laten gebruiken, maar ik kon geen manier bedenken om het te doen.

Weet iemand een manier om die waarschuwing in GCC te verbergen?


Antwoord 1, autoriteit 100%

Ik zag deze thread net terwijl ik op zoek was naar oplossingen voor dit probleem. Ik post hier voor de volledigheid de oplossing die ik heb gevonden…

De GCC-compilervlaggen die ongebruikte waarschuwingencontroleren, omvatten:

-Wunused-function
-Wunused-label
-Wunused-parameter
-Wunused-value
-Wunused-variable
-Wunused (=all of the above)

Elk van deze heeft een corresponderende negatieve vorm met “no-” ingevoegd na de W die de waarschuwing uitschakelt (in het geval dat deze is ingeschakeld door -Wall, bijvoorbeeld). Dus in jouw geval zou je

. moeten gebruiken

-Wno-unused-function

Dit werkt natuurlijk voor de hele code, niet alleen voor beweringen tijdens het compileren. Kijk voor functiespecifiek gedrag op Functiekenmerken.


Antwoord 2, autoriteit 49%

Oplossing voor GCC die geen conflicten veroorzaakt met andere compilers

#ifdef __GNUC__
#define VARIABLE_IS_NOT_USED __attribute__ ((unused))
#else
#define VARIABLE_IS_NOT_USED
#endif
int VARIABLE_IS_NOT_USED your_variable;

Antwoord 3, autoriteit 37%

Dit is een van de meest irritante waarschuwingen, hoewel ik begrijp dat het (soms) nuttig kan zijn om dode code te controleren. Maar ik heb meestal statische functies voor het opsporen van fouten, of functies die in de toekomst misschien nuttig zijn, of die alleen tijdelijk worden gebruikt, en ik wil ze in de code houden.

Gelukkig geeft deze waarschuwing niets om inline-functies.

inline static foo()
{
}

Antwoord 4, autoriteit 31%

U kunt een null-instructie maken en het resultaat naar void casten. Dit is overdraagbaar tussen compilers en gcc zal je geen waarschuwingen geven, zelfs niet met -Wallen -Wextraingeschakeld. Bijvoorbeeld:

int var;    // var is not used
(void)var;  // null statement, cast to void -- suppresses warning

Een veelgebruikte techniek is om hiervoor een macro te maken:

#define UNUSED(x) ((void)(x))
int var;
UNUSED(var);

Antwoord 5, autoriteit 9%

#define UNUSED_VAR     __attribute__ ((unused))

gebruik voor elke variabele de bovenstaande macro voor het type, bijvoorbeeld:

UNUSED_VAR int a = 2;

Antwoord 6, autoriteit 4%

Wikkel deze functies in met de volgende richtlijnen
Alle code die tussen push en pop wordt geplaatst, waarschuwt u niet voor ongebruikte functies.
De rest van de code (externe push en pop) wordt niet beïnvloed.

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function"
... your code
#pragma GCC diagnostic pop

Antwoord 7, autoriteit 3%

Dit is moeilijk te beantwoorden zonder de details van uw statische assertmacro’s te kennen. Misschien kunt u overschakelen naar een andere macro om dit probleem te voorkomen? Je kunt ofwel het ‘unused’ attribuut aan de macro toevoegen zoals werd voorgesteld, of je zou een andere vorm van CASSERT() kunnen gebruiken.

Hier zijn beschrijvingen van een paar alternatieven:

http://www.jaggersoft.com/pubs/CVu11_3.html

http://blog.kowalczyk.info/kb /compile-time-assets-in-c.html

http://www.pixelbeat.org/programming/gcc/static_asset.html


Antwoord 8, autoriteit 2%

Hoe zit het met -Wunused-label?

Other episodes