我正在设计进行一些数学计算的 C 库。我需要指定序列化接口(interface)才能保存然后加载一些数据。问题是,在库的公共(public) API 中使用 FILE* 指针是否正确(从二进制兼容性的角度来看)?
目标平台是:
- Linux x86、x86_64 和 gcc >= 3.4.6
- Windows x86, x86_64 >= WinXP with 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。
关于c - 文件的二进制兼容性*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621144/