2014-07-10 18 views
6

Sto provando a creare un progetto in Microsoft Visual C++ 2013 disabilitando tutte le estensioni non standard.Build in Visual C++ senza estensioni Microsoft

#ifdef _MSC_VER 
#include <windows.h> 
#endif 

In Proprietà di configurazione -> C/C++ -> Lingua, ho impostato "disattivare le estensioni lingua" a yes (/ Za).
Tuttavia, la costruzione del precedente codice ricevo errori come ad esempio:

C: \ Program Files (x86) \ WINDOWS Kit \ 8.1 \ include \ um \ winnt.h (11527): errore C2467: illegale dichiarazione di "struct" anonima

Ciò significa che la macro _MSC_VER è ancora definita e "windows.h" è stato incluso.

Come posso includere un file se e solo se sto usando Visual C++?

Come è possibile impostare Visual C++ in modo che compili il codice come standard C++, contrassegnando tutte le estensioni Microsoft come errori?

+1

per quanto ne so windows.h utilizza le estensioni microsoft – bolov

+0

Forse qualcosa come [questo] (http://stackoverflow.com/questions/9697013/how-to-undefine-MSC-ver)? –

+0

Passa attraverso il tuo codice base e assicurati di non includere direttamente file che non fanno parte della libreria standard. –

risposta

2

Come posso includere un file se e solo se sto utilizzando Visual C++?

Come già dimostrato, selezionando _MSC_VER.

Come è possibile impostare Visual C++ in modo che compili il codice come standard C++, contrassegnando tutte le estensioni Microsoft come errori?

Non è possibile. Non sono a conoscenza di alcun compilatore che permetta questo. Cose come le macro predefinite per la versione del compilatore sono interamente consentite dallo standard, quindi non sarebbero disabilitate come "estensioni non standard".

Se si desidera verificare che il programma si sviluppi per altre piattaforme, quindi creare il programma su altre piattaforme. GCC e Clang ti diranno cosa accetteranno molto meglio di Visual C++ :)

+0

Quindi forse la cosa migliore da fare è definire il mio DISABLE_MSC_EXTENSIONS. – Pietro

+2

@Pietro si. E se vuoi essere portabile, strutturare meglio il tuo codice in modo da isolare il codice dipendente dalla piattaforma e utilizzare le estensioni MS solo per questi. – Christophe

+0

Che dire di questo: _MSC_EXTENSIONS – Pietro

Problemi correlati