2014-02-18 3 views
0

Когда я использую Visual Studio (MSVC), и с помощью функции strcat, я получаю ошибкуC++ - проверить, безопасные функции необходимы

ошибка C4996: «strcat»: Эта функция или переменная может быть небезопасный. Вместо этого рассмотрите возможность использования strcat_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Смотрите справку для деталей.

Если бы я должен был сделать проект, который был для составителей как GCC Aswell, есть способ обнаружения, если нужны эти safe функции, например MSVC макрос?

+1

Они никогда не нужны *. Как говорится в сообщении, вы можете использовать 'strcat', указав' _CRT_SECURE_NO_WARNINGS'. Вы хотите знать, когда доступны такие функции, как 'strcat_s' *? – hvd

+0

Я не знаю, можете ли вы сделать это специально, но вы должны иметь возможность #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1, чтобы включить перегрузку. См. Http://msdn.microsoft.com/en-us/library/8ef0s5kh%28VS.80%29.aspx. Это должно помочь вам написать код, переносимый в GCC, а также – Henrik

+0

@Dirk 'strcat' является стандартной библиотечной функцией как в C, так и в C++. Откуда вы знаете, что этот вопрос не о C++? – hvd

ответ

1

Вы можете использовать условную компиляцию для межплатформенного кода. Такие, как:

#ifdef WIN 
strcat_s(... 
#else 
strcat(... 
#endif 

MSVC компилятор обнаруживает такие вызовы функций, которые были признаны в качестве осуждается и генерирует предупреждение C4996 на уровне 3. Так, просто скомпилировать с этим уровнем (или более) и посмотреть на предупреждения.

+0

с помощью '#pragma warning (disable: 4996)' [from link] избавляется от этой проблемы, большое спасибо – Joseph

+0

'#pragma warning (disable: 4996)' самый худший способ решить ваши проблемы! Он будет маскировать * другие предупреждения об устаревании, которые не имеют ссылки на ЭЛТ. '#define _CRT_SECURE_NO_WARNINGS' (возможно, хотя'/D' в командной строке компиляции в настройках проекта) является гораздо лучшим способом избежать устаревания функций CRT и максимизировать переносимость. – Medinoc

1

Обычно для этого используется #ifdef _CRT_INSECURE_DEPRECATE. Это макрос, используемый Visual для добавления этих предупреждений в первую очередь, поэтому, если вы компилируете версию Visual, которая дает предупреждения, она будет определена.

Смежные вопросы