Tôi muốn vô hiệu hóa ngoại lệ trong ứng dụng C++ của tôi, được biên dịch theo MSVC. Tôi đã chuyển sang tùy chọn Enable C++ exceptions thành NO, nhưng tôi nhận được cảnh báo cho tôi biết sử dụng tùy chọn/Ehsc, cái mà tôi không muốn.Tôi có thể tắt ngoại lệ trong STL không?
Tôi không có khối try/catch trong mã của mình, nhưng tôi sử dụng STL. Tôi đã tìm thấy rằng việc sử dụng _HAS_EXCEPTIONS định nghĩa macro = 0 nên vô hiệu hóa các trường hợp ngoại lệ trong STL, nhưng tôi vẫn nhận được cảnh báo như:
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'
Có cách nào làm thế nào để tắt các ngoại lệ STL là gì?
Lưu ý: Trong mã của tôi, tôi cũng muốn tắt các tùy chọn RTTI. Tôi nhận được cảnh báo tương tự cho dù RTTI có bật hay tắt.
Điều tôi không hiểu là khi sử dụng/MD hoặc/MDd tại sao chúng ta cần _STATIC_CPPLIB. Từ những gì tôi đã có thể đọc nó gây ra mã để sử dụng libcmt.lib và không msvcrtd.lib. Toàn bộ điểm sử dụng/MD là có các thư viện được liên kết động và không phải các thư viện liên kết tĩnh. Thêm _STATIC_CPPLIB dường như đánh bại mục đích sử dụng cờ/MD. – gnash117
_STATIC_CPPLIB không được chấp nhận trong MSVC 2010 để sử dụng MSVC 2010 sẽ chỉ thay thế một bộ cảnh báo này bằng một cảnh báo khác. – gnash117
gnash117, MSDN cho MSVC2008 cho biết khi sử dụng định nghĩa tiền xử lý _STATIC_CPPLIB, ứng dụng của bạn liên kết libcmt.lib thay vì msvcprt.lib, nhưng vẫn liên kết động với CRT chính qua msvcrt.lib. – Rom098