в моем коде). Используйте его номер (1400) вместо 1600; Я отредактирую свое решение, чтобы отразить это. Кроме того, у меня нет ни одного из его четырех отображений функций в моем коде выше. Добавьте их, если хотите. Я не буду, пока у меня не будет возможности проверить их. Только два из них могут быть переписаны для традиционного отображения функций защиты.

орое время назад я пытался использовать Visual Studio 2010 для компиляции программы MFC, в которой использовалась библиотека, написанная в Visual Studio 2003. Неудивительно, что я получил кучу предупреждений об устаревании и использовании безопасных версий различных строковых функций.

Затем я обновил соответствующие функции в библиотеке, чтобы использовать безопасные функции, и она скомпилировалась нормально.

Позже я попытался снова скомпилировать его в другой системе с помощью Visual Studio 2003, и меня раздражали несуществующие функции безопасности.


Я решил создать гибридный подход, который позволил бы мне компилировать программы, использующие библиотеку в любой среде, используя безопасные функции, если они доступны, и, если нет, совмещать их со старыми.

Сначала я решил проверить каждую функцию, чтобы увидеть, существует ли защищенная версия, но она не будет работать и требует отдельной работы для каждой функции:

#ifndef strcpy_s
    #define strcpy_s(a,b,c) strcpy(a,c)
#endif

#ifndef strcat_s
    #define strcat_s(a,b,c) strcat(a,c)
#endif

…

Поэтому я пытаюсь выяснить, существует ли способ определить, существуют ли защищенные функции. Я знаю, что они были введены в Visual Studio 2005, но есть ли#define или что то можно использовать следующим образом?

#ifndef SECURE_FUNCTIONS  // or #ifdef VS_VER_2005, #if (VS_VER >= 0x2005) etc.
    #define strcpy_s(a,b,c) strcpy(a,c)
    #define strcat_s(a,b,c) strcat(a,c)
    …
#endif

Я проверилcrtdefs.h но ничего полезного не нашел.

Ответы на вопрос(2)

Ваш ответ на вопрос