سؤال

أريد تعطيل الاستثناءات في Aplication C ++ الخاص بي، تم تجميعها ضمن MSVC. لقد قمت بتغيير الخيار تمكين استثناءات C ++ إلى لا، لكنني أحصل على تحذيرات تخبرني باستخدام الخيار / EHSC، والتي لا أريدها.


ليس لدي جرب / قبض على كتل في التعليمات البرمجية الخاصة بي، لكنني استخدم STL. لقد وجدت أن استخدام تعريف الماكرو _has_exceptions = 0 يجب أن تعطيل الاستثناءات في STL، لكنني ما زلت أحصل على تحذير مثل:


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'


هل هناك أي طريقة كيفية إيقاف الاستثناءات هي STL؟

ملاحظة: في التعليمات البرمجية التي أرغب في إيقاف تشغيل خيارات RTTI أيضا. أحصل على نفس التحذيرات بغض النظر عما إذا كان RTTI أو إيقافه.

لا يوجد حل صحيح

نصائح أخرى

يدعم Microsoft STL إلغاء تنشيط الاستثناء.

بالنسبة إلى MSVC STL تحديد الماكرو _has_exptions = 0 تعطيل الاستثناءات في حال اربطت طلبك مع خيار برنامج التحويل البرمجي LIBCMT.LIB / LIBCMTD.LIB (/ MT أو / MTD).

إذا كنت ترتبط مع خيار MSVCRT.LIB / MSVCRTD.LIB (/ MD OR / MDD برنامج التحويل البرمجي)، فأنت بحاجة إلى تحديد ماكرو آخر - _static_cpplib. في هذه الحالة إما إضافة الأسطر التالية قبل إدراج أي رمز STL:

#define _HAS_EXCEPTIONS 0
#define _STATIC_CPPLIB

أو أضف خيارات الترجمة التالية:

-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB

يرجى ملاحظة أنك تحتاج إلى تعطيل استثناءات C ++ في إعدادات المشروع.

تحتاج إلى استخدام STL يدعم إلغاء تنشيط الاستثناء. هذا عموما تعريف ماكرو تجميع الزمن.

ما لم أكن مخطئا، يقدم Stlport هذا مع _stlp_use_exceptions = 0 و _stlp_no_exceptions. لا أعرف كيف تتصرف البرامج مع هذه الإعدادات. ؛)

أعتقد أن هناك بعض العلم المخفي في السيدة STL كذلك.

يخرج Eastl من الصندوق مع استثناءات المعوقين:

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

معرف النوع هو القيام به مع تحديد نوع وقت التشغيل. قد ترغب في محاولة تحويل RTTI أيضا.

ومع ذلك، يتم تحديد أجزاء معينة من مكتبة C ++ القياسية لرمي الاستثناءات. إذا قمت بتعطيلها، فأنت تبحر إلى المياه الغامضة من "السلوك غير المحدد".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top