VS 2005, _SECURE_SCL
От: Аноним  
Дата: 04.05.08 11:16
Оценка:
Кто как борется с ворнингами?
На выражение вида
std::copy(first, last, dst)


компилятор мне выдает такую муру

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 проявилась в релизе, а не в дебаге.
Re: VS 2005, _SECURE_SCL
От: Alexander G Украина  
Дата: 04.05.08 12:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>я радостно написал #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
Re: VS 2005, _SECURE_SCL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 05.05.08 08:13
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Кто как борется с ворнингами?

А>На выражение вида
А>
А>std::copy(first, last, dst)
А>


А>компилятор мне выдает такую муру


А>

А>warning C4996: 'std::_Copy_opt' was declared deprecated


создал пустой проектик,

#include "stdafx.h"
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
   int arr1[10] = {};
   int arr2[10] = {};
   std::copy(arr1, arr1 + 10, arr2);
   return 0;
}

поставил /W4 /WX, скомпилил — ни одного warning-а

з.ы. Microsoft Visual Studio 2005 Version 8.0.50727.867 (vsvista.050727-8600)
... << RSDN@Home 1.2.0 alpha 4 rev. 1088>>
Re[2]: VS 2005, _SECURE_SCL
От: Максим2006 Беларусь  
Дата: 05.05.08 09:48
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

А>>

А>>warning C4996: 'std::_Copy_opt' was declared deprecated


OE>создал пустой проектик,


OE>
OE>#include "stdafx.h"
OE>#include <algorithm>
OE>#include <iostream>
OE>#include <vector>

OE>using namespace std;

OE>int main()
OE>{
OE>   int arr1[10] = {};
OE>   int arr2[10] = {};
OE>   std::copy(arr1, arr1 + 10, arr2);
OE>   return 0;
OE>}
OE>

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 у меня тоже отрабатывает. Может баг в версии автора
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.