FILE *

的二进制兼容性 我正在设计C库,它做了一些数学计算。我需要指定序列化接口才能保存然后加载一些数据。问题是,在库的公共API中使用FILE *指针是正确的(从二进制兼容性的角度来看)吗? 目标平台是: Linux x86,x86_64,gcc> = 3.4.6 Windows x86,x86_64> = WinXP,VS> = 2008sp1 我需要尽可能多的二进制兼容,所以目前我的变体如下:
void SMModuleSave(SMModule* module, FILE* dest);
SMModule* SMModuleLoad(FILE* src);
所以我很好奇使用FILE *或更好地切换到wchar * / char *是否正确?     
已邀请:
我不同意ThiefMaster:当有一个等效的便携式解决方案时,原生(即在linux上使用类型为
int
的文件描述符和在Windows上使用类型为
void *
的句柄)没有任何好处。 我可能会使用
FILE *
而不是从库中按名称打开文件:对于库用户来说可能更麻烦,但它也更灵活,因为大多数libc实现提供了各种文件打开方式(
fopen()
_wfopen()
_fdopen()
fdopen()
fmemopen()
,...)并且您不必自己维护单独的宽字符API。     
我不使用它,但让用户将文件描述符作为
int
传递。 然后你可以在你的代码中
fdopen()
得到一个
FILE*
。 但是,当使用Windows时,它可能不是最佳解决方案,即使它确实有一些辅助函数来获取数字文件描述符。 但是,通过
FILE*
const char*
也应该没问题。我更喜欢传递一个文件名,因为如果一个库负责打开/关闭文件,它的代码就少了。     
是的,从稳定的二进制接口角度来看,使用
FILE *
是正确的。我想也许你对使用
FILE
而不是指向它的指针感到困惑。请注意,您的标准库的
fopen
fgets
等函数都使用(作为参数和返回值)
FILE *
类型作为其公共接口的一部分。     
A
FILE *
是标准ANSI / ISO C89和C99(甚至K& R)类型。这是一个可携带的梦想,我更喜欢它。你可以安全地使用它。它不会比这更好。     

要回复问题请先登录注册