我想知道C库系统/字符串/数据结构/数据库等是否依赖于平台。?
这些库依赖于特定平台的东西是什么。 就像正则表达式/字符串操作/ sql连接等库如何依赖于平台一样。?
我可以在任何平台上使用它们来处理文件I / O /路径等 就像我们使用sys / os等模块在python中做的事情一样。?
我想构建一个处理字符串,数据库(sqlite3,mysql,Oracle),数据结构,文件I / O和系统路径的程序。并且可以在该平台上重新编译时在Windows,Linux和Mac上运行。 我希望它是基于控制台的。
请不要建议我用其他编程语言来做,我希望C大家好好回答。
由于
答案 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正则表达式函数(regcomp
,regexec
,regerror
,regfree
)是POSIX标准的一部分。
*大多数字符串操作函数(例如strstr
)都是POSIX标准的一部分。一些(例如asprintf
)是GNU扩展。
* C库不提供SQL连接。您将需要一个特定的C库来处理SQL连接,或使用libdbi
之类的东西。您需要查看特定的库以查看其他平台上的支持。
特别要注意窗口上的路径操作(考虑斜杠与反斜杠和驱动器号),特别是处理用户输入的方式以及传递给函数的内容。