将Windows专属fopen_s代码修改为macOS可兼容的fopen实现求助
macOS下fopen_s编译错误解决方法
报错翻译
你收到的编译报错:implicit declaration of function 'fopen_s' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
中文含义为:C99标准不允许隐式声明fopen_s函数
错误原因
fopen_s是Windows平台专属的安全IO函数,不属于标准C语言规范,macOS自带的Clang编译器未实现该函数,因此编译失败。
代码修改方案
使用标准C库的fopen函数替换即可,以下是和原逻辑完全兼容的替换代码:
// 需要先引入errno.h头文件才能获取错误码 #include <errno.h> // 替换原fopen_s打开audio.txt读的代码 FILE* fp_in = fopen("audio.txt", "r"); errno_t err_in = fp_in == NULL ? errno : 0; // 替换原fopen_s打开hpf.txt写的代码 FILE* fp_out = fopen("hpf.txt", "w"); errno_t err_out = fp_out == NULL ? errno : 0;
注意事项
- 原代码中后续对
err_in、err_out的错误判断逻辑无需改动,和fopen_s的返回值逻辑完全一致,0代表打开成功,非0代表对应错误码 - 如果你不需要保留
err_in、err_out变量,也可以直接判断文件指针是否为空来做错误处理,写法更简洁:
FILE* fp_in = fopen("audio.txt", "r"); if (fp_in == NULL) { // 此处写入打开失败的处理逻辑,如打印错误、退出程序 } FILE* fp_out = fopen("hpf.txt", "w"); if (fp_out == NULL) { // 此处写入打开失败的处理逻辑 }
- 文件使用完毕后仍需调用
fclose关闭指针,和原逻辑一致
内容的提问来源于stack exchange,提问作者p20xx
相关产品推荐
相关产品推荐

