2010-06-29 2 views
7

Recientemente obtuve una DLL que ha sido implementada por otros. Tengo que usarlo en mi aplicación. En el archivo de cabecera de su clase tienen la declaración de la funciónCómo deshacerse de la "especificación de excepción C++ ignorada" advertencia

void func1() throw (CCustomException); 

Ahora cuando compilo que estoy recibiendo la advertencia,

especificación de excepción

C++ ignorado excepto para indicar una función no es _declspec (nothrow)

He leído el MSDN - Documentation pero no pude entenderlo claramente. Además, no quiero desactivar la advertencia solo porque se muestra. Quiero saber lo que estoy haciendo mal en lugar de deshabilitarlo.

pensé que mi función, dicen myfunc() acceder a ese func1() de la DLL no tiene esa lista especificación de excepción. Por lo tanto, traté de tener la correspondiente lista de especificaciones de excepción en mi función también, como

void myfunc1() throw (CCustomException); 

Pero sigo recibiendo la advertencia. ¿De qué se trata esa advertencia y cómo deshacerse de ella? Estoy usando Qt 4.5 en Windows XP.

Respuesta

11

Ok, no es una respuesta, pero me gustaría throw away the exception specification and never use it again.

EDIT: Leo demasiado rápido, y no vi que usted no haya escrito la clase usted mismo. Mejor manera de deshacerse de las advertencias en msvc es a través de #pragma warning (push), seguido de #pragma warning (disable: xxxx) donde xxxx es el código de advertencia:

#ifdef _MSC_VER 
#pragma warning(push) 
#pragma warning(disable:xxxx) 
#endif 

... 

#ifdef _MSC_VER 
#pragma warning(pop) 
#endif 

EDIT: Es perfectamente seguro para desactivar la advertencia. Las especificaciones de excepciones son malas, y el compilador solo le dice que las está desactivando por usted. Incluso si rompe el estándar.

+2

Parece que está compilando como C++ 0x, en el que las especificaciones de excepción como esta están en desuso, en lugar de C++ 03. Puede haber una opción de compilación para especificar que desea '03, o simplemente para volver a habilitar las especificaciones de excepción si desea otras 'características 0x'. –

+0

@Alexandre C, Ya estoy de acuerdo con deshabilitar y todo, pero ¿de qué se trata la advertencia? ¿Por qué está ocurriendo y cuál es la razón detrás de esto? Solo quería saber esto ... – liaK

+0

@liaK: vea el enlace publicado por Alexandre. – Philipp

0

Usted puede tratar de jugar con preprocesador:

#ifdef _SOME_MSVC_DEFINE 
# define _throw(foo) 
#else 
# define _throw(foo) throw(foo) 
#endif 

void myfunc1() _throw (CCustomException); 

O bien, intente desactivar la advertencia de que en Visual Studio.

0

Encontré este link, que encontré útil. Acabo de agregar si puede ser útil para alguien ...

+0

Si bien esto puede responder teóricamente a la pregunta, [sería preferible] (// meta.stackoverflow.com/q/8259) para incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia. –

Cuestiones relacionadas