MSVC 编译器说fopen()
已弃用,建议使用fopen_s()
.
有什么办法可以使用吗fopen_s()
并且仍然便携?
任何想法#define
?
微软的*_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()
,所以我通常会考虑便携性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)