warning C4996: 'std::_Copy_opt' was declared deprecated
я радостно написал #define _SECURE_SCL 0, о чем скоро очень пожалел:
std::vector::clear перестал очищать вектор и у меня в программе начались веселые глюки.
Собственно, какого фига clear так себя ведет (исходники я, конечно, могу посмотреть, но интересно скорее — намеренное это поведение или баг) и кто как борется с этими ворнингами?
Re: VS 2005, _SECURE_SCL
От:
Аноним
Дата:
04.05.08 11:41
Оценка:
Здравствуйте, Аноним, Вы писали:
А>и кто как борется с этими ворнингами?
ещё говорят _CRT_SECURE_NO_DEPRECATE можно объявить
Re[2]: VS 2005, _SECURE_SCL
От:
Аноним
Дата:
04.05.08 11:55
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>и кто как борется с этими ворнингами?
А>ещё говорят _CRT_SECURE_NO_DEPRECATE можно объявить
Увы, не помогает, т.к. это не в CRT
#define _CRT_SECURE_NO_DEPRECATE
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
int arr1[10] = {};
int arr2[10] = {};
std::copy(arr1, arr1 + 10, arr2);
return 0;
}
warning C4996: 'std::_Copy_opt' was declared deprecated
Re[3]: VS 2005, _SECURE_SCL
От:
Аноним
Дата:
04.05.08 12:01
Оценка:
черт, да даже указанный в msdn
#define _SCL_SECURE_NO_WARNINGS
не помогает
Забыл сказать, проблема с vector::clear проявилась в релизе, а не в дебаге.
Здравствуйте, Аноним, Вы писали:
А>я радостно написал #define _SECURE_SCL 0, о чем скоро очень пожалел: А>std::vector::clear перестал очищать вектор и у меня в программе начались веселые глюки.
Опция влияет на поля того же std::vector, а, следовательно, и на бинарную совместимость между
std::vector различных единиц транлсяции.
Поэтому ещё надо прописывать не дефайном где-то среди #includов, а в опциях проекта для всех проектов солюшна.
Русский военный корабль идёт ко дну!
Re[3]: VS 2005, _SECURE_SCL
От:
Аноним
Дата:
04.05.08 12:47
Оценка:
Здравствуйте, Аноним, Вы писали:
А>>ещё говорят _CRT_SECURE_NO_DEPRECATE можно объявить
А>Увы, не помогает, т.к. это не в CRT
гы. точняк
сам не знаю, как я вместо std::copy() strcpy() увидел
а если в параметры компиляции -D_CRT_NONSTDC_NO_DEPRECATE и -D_SCL_SECURE_NO_WARNINGS добавить?
Re[4]: VS 2005, _SECURE_SCL
От:
Аноним
Дата:
04.05.08 12:52
Оценка:
А>а если в параметры компиляции -D_CRT_NONSTDC_NO_DEPRECATE и -D_SCL_SECURE_NO_WARNINGS добавить?
я уж прагмой подавил, а вот это вот -D_SCL_SECURE_NO_WARNINGS все равно не помогает
Re: VS 2005, _SECURE_SCL
От:
Аноним
Дата:
04.05.08 20:51
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Кто как борется с ворнингами? А>На выражение вида А>
А>std::copy(first, last, dst)
А>
А>компилятор мне выдает такую муру
А>
А>warning C4996: 'std::_Copy_opt' was declared deprecated
А>я радостно написал #define _SECURE_SCL 0, о чем скоро очень пожалел: А>std::vector::clear перестал очищать вектор и у меня в программе начались веселые глюки. А>Собственно, какого фига clear так себя ведет (исходники я, конечно, могу посмотреть, но интересно скорее — намеренное это поведение или баг) и кто как борется с этими ворнингами?
а че с ними бороться та
#pragma warning( disable : 4996) в stdafx.h
и все будет хорошо
Re[2]: VS 2005, _SECURE_SCL
От:
Аноним
Дата:
05.05.08 06:53
Оценка:
А>а че с ними бороться та А>#pragma warning( disable : 4996) в stdafx.h А>и все будет хорошо
Так в итоге и сделал, конечно. Я был удивлен странным поведением вектора в релизе с этим #define _SECURE_SCL 0.
Ну а тут, похоже, прав Alexander G
OE>поставил /W4 /WX, скомпилил — ни одного warning-а
OE>з.ы. Microsoft Visual Studio 2005 Version 8.0.50727.867 (vsvista.050727-8600)
у std::copy() для out-массива перегрузка есть, там нет ворнинга
если обычный указатель использовать, у меня есть ворнинг:
warning C4996: 'std::copy': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
C:\Program Files\Microsoft Visual Studio 8\VC\include\xutility(2370) : see declaration of 'std::copy'
Текст ворининга отличается, но код совпадает. Наверное, версии разные. У меня 8.0.50727.762 (SP.050727-7600)
И #define _SECURE_SCL 0 у меня тоже отрабатывает. Может баг в версии автора