我正在设计C库,它进行一些数学计算。我需要指定序列化接口才能保存并加载一些数据。问题是,在库的公共API中使用FILE *指针是否正确(从二进制兼容的角度)?文件的二进制兼容性*
目标platfoms是:
- 于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 *?
我终于决定使用文件描述符,因为能够从python和matlab脚本中使用这个库是很重要的。这两种语言都提供了fd而不是FILE *。所以我决定使用它,尽管fileno不在c标准中。 – prokher 2011-04-20 20:14:37
发生了另一个问题:AFAIK使用文件描述符和FILE *是不正确的,如果它是使用静态C运行时(使用/ MT,/ MTd) - [msdn-link](http:/ /msdn.microsoft.com/en-us/library/ms235460%28v=vs.80%29.aspx)。我很困惑。我真的不想在API中使用文件名,因为它只会将使用限制在磁盘上。相反,使用fd或FILE *可以指定任何流,但静态CRT并非如此。我被卡住了。 ( – prokher 2011-04-23 10:30:21