在Mac / Windows / Linux上使用GNU C库和其他数据结构库。?

时间:2015-01-04 12:59:33

标签: sql c libraries portability

我想知道C库系统/字符串/数据结构/数据库等是否依赖于平台。?

这些库依赖于特定平台的东西是什么。 就像正则表达式/字符串操作/ sql连接等库如何依赖于平台一样。?

我可以在任何平台上使用它们来处理文件I / O /路径等 就像我们使用sys / os等模块在python中做的事情一样。?

我想构建一个处理字符串,数据库(sqlite3,mysql,Oracle),数据结构,文件I / O和系统路径的程序。并且可以在该平台上重新编译时在Windows,Linux和Mac上运行。 我希望它是基于控制台的。

请不要建议我用其他编程语言来做,我希望C大家好好回答。

由于

2 个答案:

答案 0 :(得分:2)

好吧,只要您使用标准C库,一切都很好。 GNU C库(glibc)是C标准的一个实现,例如Microsoft有自己的实现。

从用户(您)的角度来看,实施无关紧要。例如,如果你

#include <stdio.h>

然后,您可以在任何符合标准的平台上调用fopen(),然后使用fread()进行文件i / o。或任何其他标准C函数。

Linux,Mac和Windows都符合标准(即已实施ISO C),因此标准功能在所有平台上都做同样的事情。传递给fopen()的文件路径也是相同的。 Windows在文件路径中使用反斜杠(\)而不是Unix方式(正斜杠,/)这一事实并不重要:在Windows上,在C程序中,使用Unix风格的表示法。

答案 1 :(得分:0)

对于C库函数,我建议您确保使用POSIX standard中的函数。这将(至少在理论上)保证与其他POSIX平台的兼容性。

如果你使用glibc(即普通的C库)在linux上编程,那么它的文档在指出什么是GNU扩展时相当不错,但POSIX标准(上面引用的)是黄金标准。

对于其他图书馆,您必须查看相关图书馆。

请记住,如果存在特定的不兼容区域,您可以围绕这些位使用#ifdef等,并将机器特定元素保留在特定文件中。

对于你提到的具体问题: * POSIX正则表达式函数(regcompregexecregerrorregfree)是POSIX标准的一部分。 *大多数字符串操作函数(例如strstr)都是POSIX标准的一部分。一些(例如asprintf)是GNU扩展。 * C库不提供SQL连接。您将需要一个特定的C库来处理SQL连接,或使用libdbi之类的东西。您需要查看特定的库以查看其他平台上的支持。

特别要注意窗口上的路径操作(考虑斜杠与反斜杠和驱动器号),特别是处理用户输入的方式以及传递给函数的内容。