Question

Je veux désactiver les exceptions dans mon C ++ aplication, compilé sous MSVC. Je HVE l'option Activer changé les exceptions de C à NO, mais je reçois des avertissements me disant d'utiliser l'option / CESS, que je ne veux pas.


Je n'ai pas de blocs try / catch dans mon code, mais je l'utilise STL. J'ai trouvé que l'utilisation de la définition macro _HAS_EXCEPTIONS = 0 doit désactiver les exceptions en STL, mais je suis encore en train d'avertissement comme:


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'


Est-il possible comment désactiver les exceptions est TSL?

Remarque: Dans mon code, je veux désactiver les options RTTI aussi. Je reçois les mêmes mises en garde, peu importe si le RTTI est activée ou désactivée.

Pas de solution correcte

Autres conseils

Microsoft STL prend en charge la désactivation d'exception.

Pour MSVC STL définition macro _HAS_EXCEPTIONS = 0 désactive des exceptions dans le cas où vous liez votre application avec libcmt.lib / LIBCMTD.LIB (/ MT ou / MTd option du compilateur).

Si vous établissez un lien avec msvcrt.lib / MSVCRTD.LIB (/ MD ou / option du compilateur MDd) vous devez définir une plus macro - _STATIC_CPPLIB. Dans ce cas, soit ajouter avant d'inclure un code STL les lignes suivantes:

#define _HAS_EXCEPTIONS 0
#define _STATIC_CPPLIB

ou ajouter ce qui suit aux options du compilateur:

-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB

S'il vous plaît noter que vous devez désactiver les exceptions de C dans les paramètres du projet.

Vous devez utiliser un STL qui prend en charge la désactivation d'exception. Ceci est généralement une compilation définition de la macro.

Si je ne me trompe, STLPort offre cela avec _STLP_USE_EXCEPTIONS = 0 et _STLP_NO_EXCEPTIONS. Je ne sais pas comment les programmes se comportent avec ces paramètres. ;)

Je pense qu'il ya un certain drapeau caché dans le MS STL ainsi.

Le EASTL sort de la boîte avec des exceptions disabled:

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

Le type id est de faire avec l'identification du type d'exécution. Vous pouvez essayer de tourner RTTI lui aussi.

Cependant, certaines parties de la bibliothèque standard C ++ sont spécifiées pour lancer des exceptions. Si vous les désactiver, vous naviguez dans les eaux troubles de « comportement non défini ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top