Мне нужно внести изменения в некоторый (очень) кросс-платформенный код и добавить вызовы _CrtSetDbgFlag()
функция, которая реализована в среде выполнения Visual C ++. Очевидно, что функция доступна только тогда, когда код компилируется для заголовков среды выполнения Visual C ++.
Я хочу использовать _MSC_VER
макрос для условного включения этих вызовов.
#ifdef _MSC_VER
_CrtSetDbgFlag(value);
#endif
Есть ли какая-нибудь разумная конфигурация, при которой это не будет компилироваться? Может быть, я могу использовать Visual C ++ для компиляции кода против некоторой среды выполнения, отличной от Visual C ++?
Возможно ли, что код скомпилирован с Visual C ++, чтобы _MSC_VER
определен, но отладочная среда Visual C ++ недоступна во время компиляции?
В теории да.
Если программа скомпилирована (MSVC) с использованием динамической библиотеки времени выполнения (например, MSVCRTxx.DLL) И библиотека DLL времени выполнения была изменена по какой-либо причине (исправления, инструментарий, перехват и т. Д.), То некоторые API могут работать некорректно. Программа в основном вылетает. Но я не думаю, что это распространенный случай.
Так что, если вы действительно обеспокоены этой проблемой, вам лучше скомпилировать и связать этот код статически (Увидеть / MT опция компилятора). Это будет гарантировать правильное выполнение _CrtSetDbgFlag
быть встроенным в двоичный файл.
Других решений пока нет …