Page 1 of 1

Функции _s в Visual Studio

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

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

Posted: 24 Jan 2017, 09:58
by vovan
define ом всё убирается. Если сигнатура функции такая же, то тебе всё равно что function_s вызывается.

У тебя главная задача чтобы компилировалось на разных компиляторах. Define достаточно.

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

Posted: 24 Jan 2017, 18:16
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);
    }
Просто удивило что если раньше подобные предупреждения просто отображались то теперь не компилируется. Надо бы детально разобраться в настройках.

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

Posted: 24 Jan 2017, 19:31
by anonim587
А, что за end if до сих пор не расстреливают?

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

Posted: 24 Jan 2017, 20:10
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.

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

Posted: 25 Jan 2017, 16:32
by Simple
anonim587 wrote:А, что за end if до сих пор не расстреливают?
Блять, убивал бы на месте за такое.
Бритва, ты что, не в курсе, что такой код потом саппортить будет полным кошмаром?

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

Posted: 30 Jan 2017, 10:59
by sergNN
только я этого не увидел ?
... fopen берёт указатель на название файла а fopen_s ссылку .... ???????