كيفية التخلص من تحذير "مواصفات استثناء C ++"
-
01-10-2019 - |
سؤال
حصلت مؤخرًا على DLL تم تنفيذها من قبل الآخرين. لا بد لي من استخدامه في طلبي. في ملف الرأس لفصلهم لديهم إعلان الوظيفة
void func1() throw (CCustomException);
الآن عندما أقوم بتجميعها ، أحصل على التحذير ،
مواصفات استثناء C ++ التي تم تجاهلها باستثناء الإشارة إلى وظيفة ليست _declspec (Nothrow)
قرأت ال MSDN - الوثائق لكن لا يمكن فهمها بوضوح. أيضا ، لا أريد تعطيل التحذير لمجرد أنه يظهر. أريد أن أعرف ما أفعله خطأ بدلاً من تعطيله.
اعتقدت وظيفتي ، قل myfunc()
الوصول إلى ذلك func1()
من DLL ليس لديه قائمة مواصفات الاستثناء هذه. ومن هنا حاولت الحصول على قائمة مواصفات الاستثناء المقابلة في وظيفتي أيضًا ، كما
void myfunc1() throw (CCustomException);
لكني ما زلت أحصل على التحذير. ما هو هذا التحذير وكيفية التخلص منه؟ أنا أستخدم QT 4.5 في Windows XP.
المحلول
حسنًا ، إنها غير إجابة ، لكنني سأفعل تخلص من مواصفات الاستثناء وعدم استخدامها مرة أخرى.
تحرير: قرأت بسرعة كبيرة ، ولم أر أنك لم تكتب الفصل بنفسك. أفضل طريقة للتخلص من التحذيرات في MSVC هي عبر #pragma تحذير (الدفع) تليها #pragma تحذير (تعطيل: xxxx) حيث xxxx هو رمز التحذير:
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:xxxx)
#endif
...
#ifdef _MSC_VER
#pragma warning(pop)
#endif
تحرير: من الآمن تمامًا تعطيل التحذير. مواصفات الاستثناءات شريرة ، والمترجم يخبرك فقط بأنه يعيقها لك. حتى لو كان يكسر المعيار.
نصائح أخرى
قد تحاول اللعب مع المعالج المسبق:
#ifdef _SOME_MSVC_DEFINE
# define _throw(foo)
#else
# define _throw(foo) throw(foo)
#endif
void myfunc1() _throw (CCustomException);
أو حاول تعطيل هذا التحذير في Visual Studio.
لقد وجدت هذا حلقة الوصل, ، وهو ما وجدته مفيدًا. أضافت للتو إذا كان من المفيد لشخص ما ..