Pergunta

Eu quero desativar exceções em minha aplicação C ++, compilados sob MSVC. I HVE ligado a opção Ativar exceções C ++ para NO, mas eu recebo avisos me dizendo para usar a opção / EHsc, que eu não quero.


Eu não tenho blocos try / catch no meu código, mas eu uso STL. Eu descobri que usando _HAS_EXCEPTIONS definição de macro = 0 deve desabilitar as exceções em STL, mas ainda estou recebendo aviso como:


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'


Existe alguma maneira como desligar as exceções é STL?

Nota: No meu código eu quero desligar as opções RTTI também. Recebo os mesmos avisos não importa se o RTTI é ligado ou desligado.

Nenhuma solução correta

Outras dicas

A Microsoft suporta STL exceção desativação.

Para MSVC STL definir _HAS_EXCEPTIONS macro = 0 desativa exceções no caso de você ligar a sua aplicação com LIBCMT.LIB / LIBCMTD.LIB (/ MT ou / opção de compilador MTD).

Se você ligar com msvcrt.lib / Msvcrtd.lib (/ MD ou opção de compilador / MDD) é preciso definir mais uma macro - _STATIC_CPPLIB. Neste caso, adicione as seguintes linhas antes de incluir qualquer código STL:

#define _HAS_EXCEPTIONS 0
#define _STATIC_CPPLIB

ou adicionar o seguinte para opções do compilador:

-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB

Por favor note que você precisa desativar C ++ exceções nas configurações do projeto.

Você precisa usar um STL que a desactivação suportes exceção. Isso geralmente é uma definição macro em tempo de compilação.

Se não me engano, ofertas STLport isto com _STLP_USE_EXCEPTIONS = 0 e _STLP_NO_EXCEPTIONS. Eu não sei como os programas se comportam com essas configurações. ;)

Eu acho que há alguma bandeira escondido no STL MS também.

O EASTL sai da caixa com exceções desativado:

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

O tipo ID tem a ver com a identificação do tipo run-time. Você pode querer tentar transformar RTTI fora também.

No entanto, certas partes da biblioteca padrão C ++ são especificados para exceções lance. Se você desativá-los você está navegando nas águas turvas de "comportamento indefinido".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top