Domanda

Voglio disattivare eccezioni nel mio C ++ aplication, compilato sotto MSVC. Ho hve acceso l'opzione Attiva eccezioni C ++ per NO, ma ottengo gli avvertimenti che mi dicono di utilizzare l'opzione / EHsc, che non voglio.


Non ho blocchi try / catch nel mio codice, ma io uso STL. Ho scoperto che usando _HAS_EXCEPTIONS macro definizione = 0 dovrebbe disabilitare le eccezioni di cui STL, ma sto ancora ricevendo avvertimento come:


warning C4275: non dll-interface class 'stdext::exception' used as base for dll-interface class 'std::bad_typeid' see declaration of 'stdext::exception' see declaration of 'std::bad_typeid'


C'è un modo come spegnere le eccezioni si STL?

Nota: Nel mio codice Voglio disattivare le opzioni RTTI, anche. Ottengo gli stessi avvisi, non importa se il RTTI è acceso o spento.

Nessuna soluzione corretta

Altri suggerimenti

Microsoft STL supporta eccezione di disattivazione.

Per MSVC STL definire macro _HAS_EXCEPTIONS = 0 disabilita eccezioni nel caso in cui si collega l'applicazione con LIBCMT.LIB / LIBCMTD.LIB (/ MT o / MTd opzione del compilatore).

Se si collega con msvcrt.lib / MSVCRTD.LIB (/ MD o opzione del compilatore / MDD) è necessario definire un altro macro - _STATIC_CPPLIB. In tal caso, aggiungere le seguenti righe prima di includere qualsiasi codice STL:

#define _HAS_EXCEPTIONS 0
#define _STATIC_CPPLIB

o aggiungere quanto segue alle opzioni del compilatore:

-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB

Si noti che è necessario disabilitare le eccezioni C ++ nelle impostazioni del progetto.

È necessario utilizzare uno STL che supporta eccezione disattivazione. Questo è generalmente una macro definizione di compilazione.

Se non mi sbaglio, STLPort offre questo _STLP_USE_EXCEPTIONS = 0 e _STLP_NO_EXCEPTIONS. Non so come i programmi si comportano con queste impostazioni. ;)

Credo che ci sia una certa bandiera nascosta nel STL MS pure.

L'EASTL esce dalla scatola con le eccezioni disabilitata:

http: //www.open- std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

Il tipo id è a che fare con l'identificazione di tipo run-time. Si consiglia di provare a girare RTTI fuori pure.

Tuttavia, alcune parti del libreria standard C ++ sono specificati per generare eccezioni. Se li si disattiva state navigando nelle acque torbide del "comportamento non definito".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top