我正在設計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