Posso disattivare eccezioni in STL?
-
23-08-2019 - |
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".