Существуют ли случаи, когда код компилируется с помощью Visual C ++, но среда выполнения Visual C ++ недоступна?

Мне нужно внести изменения в некоторый (очень) кросс-платформенный код и добавить вызовы _CrtSetDbgFlag() функция, которая реализована в среде выполнения Visual C ++. Очевидно, что функция доступна только тогда, когда код компилируется для заголовков среды выполнения Visual C ++.

Я хочу использовать _MSC_VER макрос для условного включения этих вызовов.

#ifdef _MSC_VER
_CrtSetDbgFlag(value);
#endif

Есть ли какая-нибудь разумная конфигурация, при которой это не будет компилироваться? Может быть, я могу использовать Visual C ++ для компиляции кода против некоторой среды выполнения, отличной от Visual C ++?

Возможно ли, что код скомпилирован с Visual C ++, чтобы _MSC_VER определен, но отладочная среда Visual C ++ недоступна во время компиляции?

-1

Решение

В теории да.

Если программа скомпилирована (MSVC) с использованием динамической библиотеки времени выполнения (например, MSVCRTxx.DLL) И библиотека DLL времени выполнения была изменена по какой-либо причине (исправления, инструментарий, перехват и т. Д.), То некоторые API могут работать некорректно. Программа в основном вылетает. Но я не думаю, что это распространенный случай.

Так что, если вы действительно обеспокоены этой проблемой, вам лучше скомпилировать и связать этот код статически (Увидеть / MT опция компилятора). Это будет гарантировать правильное выполнение _CrtSetDbgFlag быть встроенным в двоичный файл.

0

Другие решения

Других решений пока нет …