【发布时间】:2011-08-03 00:44:02
【问题描述】:
我正在设计进行一些数学计算的 C 库。我需要指定序列化接口才能保存然后加载一些数据。问题是,在库的公共 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* 是否正确?
【问题讨论】:
-
我终于决定使用文件描述符,因为能够从 python 和 matlab 脚本中使用这个库很重要。这两种语言都提供 fd 但不提供 FILE*。所以我决定使用它,尽管 fileno 不在 c 标准中。
-
发生了另一个问题:AFAIK 如果它是使用静态 C 运行时(使用 /MT、/MTd)构建的 dll 的 API,则同时使用文件描述符和 FILE* 是不正确的 - @987654321 @。我很迷惑。我真的不想在 API 中使用文件名,因为它只会将使用限制为磁盘上的文件。相反,使用 fd 或 FILE* 可以指定任何流,但静态 CRT 并非如此。我被困住了。 :(
标签: c api binary-compatibility