2009-07-01 8 views
5

GCC sembra consentire "e"/"o" ​​da utilizzare al posto di "& &"/"||" in codice C++; tuttavia, come mi aspettavo, molti compilatori (in particolare MSVC 7) non supportano questo. Il fatto che GCC lo permetta ha causato alcuni fastidi per noi nel fatto che abbiamo diversi sviluppatori che lavorano sullo stesso codice su più piattaforme e, occasionalmente, questi "errori" scivolano via mentre le persone stanno passando avanti e indietro tra lo sviluppo di Python e C++.È possibile disattivare il supporto per "e"/"o" ​​l'utilizzo dell'operatore booleano in gcc?

Idealmente, ci ricordiamo tutti di utilizzare la sintassi appropriata, ma per quelle situazioni in cui occasionalmente ci incasiniamo, sarebbe davvero bello se GCC non lo lasciasse scorrere. Qualcuno ha qualche idea sugli approcci a questo?

Se "e" e "o" sono semplicemente #definiti, potrei usare #undef quando si utilizza GCC, ma temo che sia più probabile che sia incorporato nel compilatore a livello più fondamentale.

Grazie.

risposta

16

Fanno parte dello standard C++, si veda ad esempio this StackOverflow answer (che riporta le parti rilevanti dello standard).

Un'altra risposta nella stessa domanda indica come fare il contrario: farli funzionare in MSVC.

Per disabilitarli in GCC, utilizzare -fno-operator-names. Si noti che, così facendo, si sta effettivamente passando a un dialetto non standard di C++ e si rischia di scrivere codice che potrebbe non essere compilato correttamente su compilatori conformi agli standard (ad esempio, se si dichiara un variabile con un nome che sarebbe normalmente riservato).

0

Avete considerato uno strumento di analisi del codice? Qualcosa di simile a FxCop? Con FxCop puoi scrivere le tue regole (controlla per & &) e puoi impostarlo per l'esecuzione durante la fase di pre-compilazione.

7

Le parole sono standard in C++ senza l'inclusione di alcuna intestazione.

Le parole sono standard in C se si include l'intestazione <iso646.h>.

MSVC non fornisce alcun servizio non supportando gli standard.

Tuttavia, è possibile utilizzare gli strumenti per imporre il mancato utilizzo delle parole chiave. E può essere una linea guida per la codifica, e puoi addestrare rapidamente la tua squadra a non fare errori di portabilità stupidi. Non è così difficile evitare il problema.

-3

-pedantic-errors può essere d'aiuto per questo, tra gli altri gnu-ismi.

+1

-1: questo non è un gnu-ismo, è parte dello standard di lingua. –

Problemi correlati