gpt4 book ai didi

c - 有没有办法在 GCC 中使用 fopen_s() 或至少创建一个关于它的#define?

转载 作者:太空狗 更新时间:2023-10-29 16:34:40 31 4
gpt4 key购买 nike

MSVC 编译器表示 fopen() 已弃用,并建议使用 fopen_s()

有没有什么方法既可以使用 fopen_s() 又可以移植?

#define 有什么想法吗?

最佳答案

Microsoft 的 *_s 函数不可移植,我通常使用等效的 C89/C99 函数并禁用弃用警告 (#define _CRT_SECURE_NO_DEPRECATE)。

如果您坚持,您可以在没有fopen_s() 的平台上使用委托(delegate)fopen() 的适配器函数(不一定是宏!),但是你必须小心映射 errno_terrno 返回代码的值。

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() 更安全,所以我通常会考虑可移植性。

关于c - 有没有办法在 GCC 中使用 fopen_s() 或至少创建一个关于它的#define?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1513209/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com