Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
899
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
fopen устаревшее предупреждение
В компиляторе Visual Studio 2005 C++ я получаю следующее предупреждение, когда мой код использует fopen и такие вызовы.
1>foo.cpp(5) : warning C4996: 'fopen' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(234) : see declaration of 'fopen'
1> Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
Как мне это предотвратить?
Похоже, что Microsoft устарело множество вызовов, которые используют буферы для повышения безопасности кода. Однако предлагаемые ими решения не являются портативными. В любом случае, если вы не заинтересованы в использовании защищенной версии их вызовов (например, fopen_s), вам нужно поместить определение _CRT_SECURE_NO_DEPRECATE перед включенными заголовочными файлами. Например:
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
Директива препроцессора также может быть добавлена в настройки проекта, чтобы применить ее ко всем файлам проекта. Для этого добавьте _CRT_SECURE_NO_DEPRECATE в свойства проекта - > свойства конфигурации -> C/C++ - > препроцессор - > определения препроцессора .
Ну вы могли бы добавить а:
#pragma warning (disable : 4996)
прежде чем использовать fopen, но рассматривали ли вы возможность использования fopen_s, как следует из предупреждения? Он возвращает код ошибки, позволяющий проверить результат вызова функции.
Проблема с простым отключением устаревших предупреждений функций заключается в том, что Microsoft может удалить рассматриваемую функцию в более поздней версии CRT, нарушив ваш код (как указано ниже в комментариях, это не произойдет в данном случае с fopen, потому что это часть стандартов C & C++ ISO).
Это просто дерзость Microsoft. "Deprecated" подразумевает языковую функцию, которая не может быть предусмотрена в будущих версиях стандартного языка / стандартных библиотек, как это предписано комитетом по стандартам. Это не означает или не должно означать: "мы, в одностороннем порядке, не думаем, что вы должны использовать его", независимо от того, насколько обоснован этот совет.
Рассмотрите возможность использования библиотеки переносимости, такой как glib или apache portable runtime . Они, как правило, обеспечивают безопасный, портативный Альтернативы для звонков, как эти. Это тоже хорошо, потому что эти небезопасные вызовы устарели в большинстве современных сред.
Я использую VisualStdio 2008.
В этом случае я часто ставлю Preprocessor Definitions
Свойства Меню \ Project \ [ProjectName]... Alt+F7
Если щелкнуть это меню или нажать Alt + F7 в окне проекта, вы увидите окно "Property Pages".
Затем смотрите меню слева от окна.
Свойства Конфигурации \ C/C++ \ Препроцессор
Затем добавьте _CRT_SECURE_NO_WARNINGS в \ Preprocessor Definitions .
Если вы хотите, чтобы он был использован на многих платформах, вы можете использовать его в качестве комментария, например:
#if defined(_MSC_VER) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) \
|| defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
errno_t err = fopen_s(&stream,name, "w");
#endif
#if defined(unix) || defined(__unix) || defined(__unix__) \
|| defined(linux) || defined(__linux) || defined(__linux__) \
|| defined(sun) || defined(__sun) \
|| defined(BSD) || defined(__OpenBSD__) || defined(__NetBSD__) \
|| defined(__FreeBSD__) || defined __DragonFly__ \
|| defined(sgi) || defined(__sgi) \
|| defined(__MACOSX__) || defined(__APPLE__) \
|| defined(__CYGWIN__)
stream = fopen(name, "w");
#endif
Многие из защищенных функций Microsoft, включая fopen_s(), являются частью C11, поэтому теперь они должны быть переносимыми. Вы должны понимать,что защищенные функции отличаются поведением исключений и иногда возвращаемыми значениями. Кроме того, вы должны знать, что, хотя эти функции стандартизированы, это необязательная часть стандарта (приложение K), которую по крайней мере glibc (по умолчанию на Linux) и FreeBSD libc не реализуют.
Однако я боролся с этой проблемой в течение нескольких лет. Я разместил здесь больший набор конверсий macros. Для решения вашей непосредственной проблемы поместите следующий код во включаемый файл и включите его в исходный код:
#pragma once
#if !defined(FCN_S_MACROS_H)
#define FCN_S_MACROS_H
#include <cstdio>
#include <string> // Need this for _stricmp
using namespace std;
// _MSC_VER = 1400 is MSVC 2005. _MSC_VER = 1600 (MSVC 2010) was the current
// value when I wrote (some of) these macros.
#if (defined(_MSC_VER) && (_MSC_VER >= 1400) )
inline extern
FILE* fcnSMacro_fopen_s(char *fname, char *mode)
{ FILE *fptr;
fopen_s(&fptr, fname, mode);
return fptr;
}
#define fopen(fname, mode) fcnSMacro_fopen_s((fname), (mode))
#else
#define fopen_s(fp, fmt, mode) *(fp)=fopen( (fmt), (mode))
#endif //_MSC_VER
#endif // FCN_S_MACROS_H
Конечно, этот подход не реализует ожидаемое поведение исключения.
У меня тоже была такая же проблема. Когда я пытаюсь добавить библиотеку opencv
#include <opencv\cv.h>
Я получил не предупреждение, а ошибку.
error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\program files (x86)\opencv\build\include\opencv2\flann\logger.h
Я также использовал директивы препроцессора, как уже упоминалось. Но это не решило проблему.
Я решил ее следующим образом:
- Перейдите в свойства - > C/C++ -> предварительно скомпилированные заголовки - > Выберите не использовать предварительно скомпилированные заголовки в предварительно скомпилированном заголовке.