Функции Microsoft *_s
недоступны, я обычно использую эквивалентные функции C89/C99 и отключать предупреждения об отказе (#define _CRT_SECURE_NO_DEPRECATE
).
Если вы настаиваете, вы можете использовать функцию адаптера (не обязательно макро!), Что делегаты fopen()
на платформах, которые не имеют fopen_s()
, но вы должны быть осторожны, чтобы отобразить значения errno_t
кода возврата из errno
.
errno_t fopen_s(FILE **f, const char *name, const char *mode) {
errno_t ret = 0;
assert(f);
*f = fopen(name, mode);
/* Can't be sure about 1-to-1 mapping of errno and MS' errno_t */
if (!*f)
ret = errno;
return ret;
}
Однако, я не вижу, как fopen_s()
любое более безопасным, чем fopen()
, поэтому я обычно хожу на портативности.
Аналогичная проблема [здесь] (http://stackoverflow.com/questions/14386/fopen-deprecated-warning). – luvieere