Forum: Compiler & IDEs STM32: Compilerwarnung vorübergehend unterdrücken


von timertick_t (Gast)


Lesenswert?

Bei vordefinierten Callbacks bekomme ich häufig eine Warnung:
1
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
2
{
3
  /* Turn LED4 on: Transfer process is correct */
4
  BSP_LED_On(LED4);
5
}
unused parameter 'AdcHandle' [-Wunused-parameter]

Plöt irgendwie. Kann man das mit einem #pragma o.ä. nur für diese 
Funktion vorübergehend unterbinden?

von foo (Gast)


Lesenswert?

GCC:
1
void foo(int __attribute__((unused))key)

Portabler ist der Trick mit
1
#define UNUSED(x) (void)(x)
2
3
void foo(int key) {
4
    UNUSED(key);
5
}

von Klaus (Gast)


Lesenswert?

Grundsätzlich gibt es solche Pragmas. Aber die Details sind 
Compilerabhängig.
Musst Du mal im Handbuch schauen.

von Dr. Sommer (Gast)


Lesenswert?

In C++ kannst du einfach den Namen des Parameters im Funktionskopf 
weglassen. In C bleibt nur der o.g. void cast.

von timertick_t (Gast)


Lesenswert?

@foo (Gast):
Hmmmh... weiß ned so recht ob ich das will.
Die Interrupt-Callback-Funktionen stellt ST häufig in Dateien wie 
stm32f4xx_it.h zur Verfügung; um den Code portabel zu halten möchte ich 
in dem Hädder nix ändern.
Geht das ned irgendwie mit aus und wiedereinschalten der Warnung?

Das steht in main:
#pragma GCC diagnostic ignored "-Wunused-parameter"

Eigentlich sollte die Meldung ja dann auch unterdrückt werden, oder? 
Oder gilt dies nur für die Datei mit main() ...?

von foo (Gast)


Lesenswert?

Du brauchst das unused Attribute ja nur an deinen eigenen Callback 
dranzutackern, also
1
void HAL_ADC_ConvCpltCallback(__attribute__((unused)) ADC_HandleTypeDef *AdcHandle)
2
{
3
  /* Turn LED4 on: Transfer process is correct */
4
  BSP_LED_On(LED4);
5
}

von timertick_t (Gast)


Lesenswert?

HA!
Ganz einfach.
Für den nächsten der über das gleiche Problem stolpert:
1
#pragma GCC diagnostic ignored "-Wunused-parameter"
2
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
3
{
4
  /* Turn LED4 on: Transfer process is correct */
5
  BSP_LED_On(LED4);
6
}
7
#pragma GCC diagnostic warning "-Wunused-parameter"
Erledigt.

von timertick_t (Gast)


Lesenswert?

Hast recht,
1
void HAL_ADC_ConvCpltCallback(__attribute__((unused)) ADC_HandleTypeDef *AdcHandle)
wäre auch gegangen.

von guest (Gast)


Lesenswert?

Also wenn schon mit pragmas, dann aber richtig:
[c]
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{
  /* Turn LED4 on: Transfer process is correct */
  BSP_LED_On(LED4);
}
#pragma GCC diagnostic pop
[c]

von guest (Gast)


Lesenswert?

Code tags sollte man natürlich auch richtig benutzen:
1
#pragma GCC diagnostic push
2
#pragma GCC diagnostic ignored "-Wunused-parameter"
3
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
4
{
5
  /* Turn LED4 on: Transfer process is correct */
6
  BSP_LED_On(LED4);
7
}
8
#pragma GCC diagnostic pop

von timertick_t (Gast)


Lesenswert?

Was ist der Grund für push & plop?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Man muss beim Wiedereinschalten nicht explizit hinschreiben, was man 
wiedereinschaltet -- eine Fehlerquelle weniger.

von foo (Gast)


Lesenswert?

pop setzt -Wunused-parameter auf den Wert zurück, den es vorher hatte. 
Die erste Variante dagegen reaktiviert es immer.

Wenn es vorher nicht aktiv war, gibt das viele unerwartete Warnings im 
nachfolgenden Code.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.