2011-01-11 7 views

risposta

10

GCC vi fornisce con pragma per questo scopo:

http://gcc.gnu.org/onlinedocs/gcc-4.5.2/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas

Attualmente non farà esattamente quello che vuoi, dal momento che sembra di farlo su un file base di file, ma nella prossima versione di gcc (4.6), sembra come se si è sensibili al contesto:

http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas

+0

Può funzionare su base funzione per funzione. Dalla documentazione: "GCC tiene traccia dell'ubicazione di ciascun pragma e invia la diagnostica in base allo stato di quel punto nel file sorgente, quindi i pragma che si verificano dopo una riga non influiscono sulla diagnostica causata da quella linea." –

+2

@Carl: In realtà, quei documenti sono per la versione di sviluppo corrente (4.6), quindi non è applicabile a 4.5, se si controlla il link che ho dato. –

+0

oh ok. In realtà non ho visto nessuna versione di quel documento. Grazie per il chiarimento. –

1

Questo è un po 'vecchio, ma mi sono imbattuto in essa cercando la stessa risposta, così ho pensato che avrei posto la mia soluzione (trovato per tentativi ed errori):

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wframe-larger-than=" 

void func() 
{ int x[2000] = {}; printf("%d",x[1]); }  

#pragma GCC diagnostic pop 

sembra funzionare. Per qualche ragione, provare a usare diagnostic warning non ha funzionato. Non sembra possibile modificare la dimensione dello stack che genera l'avviso. Inoltre, è necessario il = alla fine. Forse il prossimo ragazzo lo troverà e si salverà un po 'di tempo :). Questo è 4.6.2 (su un compilatore cross ARM).

John

Problemi correlati