Avatar billede karas Nybegynder
14. september 2006 - 20:49 Der er 5 kommentarer

Problem med STL uden exception slået til

I MS Visual C++ 2005 får jeg følgende warning (flere gange) når jeg laver et projekt der includerer <string>, men hvor exceptions er slået fra:

warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc

Fx:
#include <string>

int main( int argc, char argv[] )
{
    return 0;
}

Så vidt jeg kan så må det skyldes at _HAS_EXCEPTIONS er slået til, men hvorfor det? Warning'en kommer af at compileren laver en try-catch blok og så kunne man jo også godt tro at den kunne finde på at kaste exceptions.

Ved du om jeg kan ignorere den warning eller ændre på mine indstillinger så den ikke kommer?
Jeg har slået exceptions fra gennem Properties -> C++ -> Code Generation -> Enable C++ Exceptions = No
Avatar billede arne_v Ekspert
14. september 2006 - 20:59 #1
min erfaring er at man ved alle C++ programmer som bruger aegte C++ funktionalitet
skal bruge /GX for at undgaa den fejl meddelelse

(/EHsc er nok 2005 alias 8.0 versionen af /GX)

hvorfor ikke bare goere som den siger ?
Avatar billede karas Nybegynder
14. september 2006 - 21:12 #2
Det kan ikke være rigtigt at man ikke kan benytte STL biblioteket uden at kunne slå exceptions fra! Desuden bruges macro'er til at specificere try-catch blokke, hvilket ikke ville give mening hvis exceptions ikke kunne slås fra.

Jeg er ved at lave et bibliotek som jeg ønsker andre kan benytte selv om de ikke bruger exceptions - og så ville det jo ikke være så heldigt hvis jeg kaster en exception.
Avatar billede karas Nybegynder
14. september 2006 - 21:20 #3
Hmm, jeg tog måske fejl... Jeg har fundet følgende på http://support.microsoft.com/kb/154419/



Q10: I am getting compiler warning "C4530: C++ exception handler used, but unwind semantics are not enabled. Specify -GX." What does this mean?

A10: Programs that use the Standard C++ library must be compiled with C++ exception handling enabled. C++ exception handling can be enabled by:
•    Selecting the Enable exception handling option in the C++ Language Category of the C/C++ tab in the Project Settings dialog box. -or-

•    Using the /GX compiler switch.
Avatar billede arne_v Ekspert
15. september 2006 - 00:06 #4
hvis der er noget C++ library kode der er compiler med exception kan du ikke gøre
noget ved det i din compile
Avatar billede karas Nybegynder
15. september 2006 - 17:08 #5
Jeg fandt ud af at man kan sørge for at try-catch samt throw ikke bliver brugt i STL biblioteket. Man skal blot definere _HAS_EXCEPTIONS som værende nul (0) inden noget STL code bliver parset af pre-compileren.

Vær dog opmærksom på at _HAS_EXCEPTIONS ikke ser ud til at være dokumenteret af MS så der er nok ingen garanti for brugen...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester