Функции _s в Visual Studio

Moderator: Little Muk

Post Reply
User avatar
Бритва
Posts: 4947
Joined: 20 Aug 2012, 02:14
Location: Peterburg

Функции _s в Visual Studio

Post by Бритва »

В профвопросы кажется никто не заглядывает, напишу здесь, потом можно наверно и перенести. Захотел отладить старые программы в новом Visual Studio и компилятор стал злостно предупреждать что fopen() ныне небезопасна и отказался компилировать и мол надо теперь поменять на fopen_s(). Ну это сравнительно легко оказалось поправить убрав предупреждения в препроцессоре (что не есть хорошо). Погуглив тему обнаружил что Майкрософт подменяет некоторые функции function() своим аналогом function_s(). Кто с этим сталкивался и как лечили? Проекты кросплатформенnые поэтому тупо менять fopen на fopen_s не хотелось бы.
принципиально беспринципный

Image
vovan
Posts: 1511
Joined: 22 Sep 2011, 13:21

Re: Функции _s в Visual Studio

Post by vovan »

define ом всё убирается. Если сигнатура функции такая же, то тебе всё равно что function_s вызывается.

У тебя главная задача чтобы компилировалось на разных компиляторах. Define достаточно.
User avatar
Бритва
Posts: 4947
Joined: 20 Aug 2012, 02:14
Location: Peterburg

Re: Функции _s в Visual Studio

Post by Бритва »

vovan wrote:define ом всё убирается. Если сигнатура функции такая же, то тебе всё равно что function_s вызывается.

У тебя главная задача чтобы компилировалось на разных компиляторах. Define достаточно.
Спасибо. Да, народ на форумах подобное тоже пишет. Сигнатура не совсем такая, fopen берёт указатель на название файла а fopen_s ссылку, но не суть. Прийдётся немножко добавить в код. Ну типа так как в примере. Эх, не люблю усложнять код на ровном месте.

Code: Select all

FILE *fp_config;
const char *configfile ;
configfile = "bot.conf";
#ifdef WIN32
    errno_t err;
    if( (err  = fopen_s( &fp_config, configfile, "r" )) !=0 ) {
#else
    if ((fp_config = fopen(configfile, "r")) == NULL) {
#endif
        fprintf(stderr, "Cannot open config file %s!\n", configfile);
    }
Просто удивило что если раньше подобные предупреждения просто отображались то теперь не компилируется. Надо бы детально разобраться в настройках.
принципиально беспринципный

Image
anonim587
Posts: 7883
Joined: 07 Jun 2014, 19:52

Re: Функции _s в Visual Studio

Post by anonim587 »

А, что за end if до сих пор не расстреливают?
Если народ, который 20 лет назад мечтал о свободе, сегодня выбирает рабство...
https://novayagazeta.ru/articles/2013/0 ... volyutsiya
Россия как "Скотный двор"
еврей Михаил Веллер - Великий последний шанс
User avatar
Бритва
Posts: 4947
Joined: 20 Aug 2012, 02:14
Location: Peterburg

Re: Функции _s в Visual Studio

Post by Бритва »

anonim587 wrote:А, что за end if до сих пор не расстреливают?
Чем тебе не нравится препроцессор?

https://msdn.microsoft.com/en-us/library/ew2hz0yd.aspx
msdn.microsoft.com wrote: Visual Studio 2015
Other Versions


For the latest documentation on Visual Studio 2017 RC, see Visual Studio 2017 RC Documentation.

The #if directive, with the #elif, #else, and #endif directives, controls compilation of portions of a source file. If the expression you write (after the #if) has a nonzero value, the line group immediately following the #if directive is retained in the translation unit.
принципиально беспринципный

Image
User avatar
Simple
Posts: 8678
Joined: 28 Sep 2011, 10:46
ник с it-ru.de: верифицирован
Location: Питер - Ганновер

Re: Функции _s в Visual Studio

Post by Simple »

anonim587 wrote:А, что за end if до сих пор не расстреливают?
Блять, убивал бы на месте за такое.
Бритва, ты что, не в курсе, что такой код потом саппортить будет полным кошмаром?
Is this your homework, Larry? (c)
User avatar
sergNN
Posts: 2695
Joined: 23 Sep 2011, 21:50

Re: Функции _s в Visual Studio

Post by sergNN »

только я этого не увидел ?
... fopen берёт указатель на название файла а fopen_s ссылку .... ???????
Если йето было б так то счастливы те мужчины, только равнозначность в понимании таких как ты, отлично от реалий по совести. (c) проц
Post Reply