Quanti avvisi in C abilitare?

1

Questo è un piccolo progetto di circa 2000LOC. È in fase di compilazione con -Wall . Ora, ho provato ad aggiungere -Wextra . Sono successe due cose:

  • Sono stati visualizzati alcuni avvisi minori ma validi, ad es. Confronto firmato con unsigned
  • Sono stati visualizzati alcuni avvisi minori ma falsi, ad es. Parametro funzione non utilizzato.

Queste funzioni implementano prototipi concordati. Ma per ora i parametri extra non sono davvero necessari.

Tuttavia gli avvisi non fissi inquinano il log di costruzione e potrebbero nascondere un avviso molto più pericoloso.

Il -Wextra dovrebbe essere conservato o rimosso? Come può essere raggiunto un compromesso per lo sviluppo del codice più robusto in futuro?

    
posta Vorac 04.12.2013 - 10:29
fonte

2 risposte

3

quasi tutti gli avvertimenti hanno soluzioni alternative per zittirli in circostanze specifiche

  • il confronto firmato senza segno indica che devi ricontrollare i tipi

  • gli avvisi dei parametri inutilizzati possono essere disattivati aggiungendo un'istruzione (void)arg; nella funzione, questo è un noop e documenterà che l'argomento non è utilizzato

in caso contrario puoi circondare il codice di emissione di avvertimento con #pragma s che disabilita e riattiva tali avvisi quando necessario

    
risposta data 04.12.2013 - 10:39
fonte
3

Ci sono diversi modi per sbarazzarsi di quegli avvertimenti innocui, senza disabilitare anche quelli utili.

  1. Le opzioni di avviso -Wall e -Wextra attivano un gruppo di avvertenze che possono essere abilitate / disabilitate singolarmente. Per evitare di generare avvisi di "parametri inutilizzati", puoi usare

    -Wall -Wextra -Wno-unused-parameter
    
  2. Se è solo per un numero limitato di argomenti in un numero limitato di funzioni che l'avviso "parametro inutilizzato" è noto come falso, è possibile sopprimere l'avviso caso per caso

    • O utilizzando il parametro, se solo in una dichiarazione non operativa come

      (void)arg;
      
    • Oppure, se non ti dispiace il codice specifico di GCC, aggiungendo l'attributo unused ai parametri rilevanti

      void foo(int arg __attribute__((unused)) )
      { /* ... */ }
      
risposta data 04.12.2013 - 10:46
fonte

Leggi altre domande sui tag